Jquery值不更新

jquery value not updating

本文关键字:更新 Jquery      更新时间:2023-09-26
function addrewarddb()
{
    var rval="98";
    $.post("db/mkreward.php",{
        proid:getURLParameter("id")
    },function(data){

         rval="99";
         alert(rval);
    });
    alert(rval);
     return rval;
}

函数执行时返回98而不是99。两个警报显示的是98,然后是99。如何使我的函数返回99。我认为这里的问题是函数返回之前从服务器页面的响应mkreward.php.我如何能使函数返回后从服务器

的响应

Post call是异步的

这意味着函数在HTTP请求完成之前返回。

然后,当$.post()调用结束时,它会更新变量并发出警告。

从jquery文档:

async Boolean默认值:true默认情况下,发送所有请求异步(即默认设置为true)。如果你需要同步请求,将此选项设置为false。跨域请求和dataType: "jsonp"请求不支持同步操作。注意,同步请求可能会暂时锁定浏览器,在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,不赞成对jqXHR ($.Deferred)使用async: false;你必须使用完整/成功/错误回调。

将返回值放入回调函数:

function addrewarddb()
{
    var rval="98";
    $.post("db/mkreward.php",{
        proid:getURLParameter("id")
    },function(data){

         rval="99";
         alert(rval);
         return rval;
    });

}

您有asyncpost调用,并且您的返回语句将在回调函数调用之前执行。您可以从addrewarddb()返回post对象,并像这样对其调用complete。

function addrewarddb()
{
    var rval="98";
    return $.post("db/mkreward.php",{
        proid:getURLParameter("id")
    })
}
addrewarddb().complete (function (data){
       alert( data);
       return data;
});

你可以使用

创建一个同步的jquery请求
$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});

或者等待回调函数得到结果

这是因为 $.post 异步工作。 $post $.ajax 的简写。为了能够告诉 $.post 同步(这是你想要的),你必须使用$.ajax

你的函数的翻译应该是这样的:

function addrewarddb() {
    var rval = "98";
    $.ajax({
        type: "POST",
        url: "db/mkreward.php",
        data: { proid: getURLParameter("id") },
        async: false,
        success: function (msg) {
            rval = "99";
            alert(rval);
        },
        error: function (jqXHR, textStatus) {
        }
    });
    alert(rval);
    return rval;
}