Javascript jquery值未更新

Javascript jquery值未更新,javascript,jquery,Javascript,Jquery,当此函数执行时,函数返回98而不是99。两个警报显示98,那么99。如何使我的函数返回99。我认为这里的问题是在服务器页面mkreward.php响应之前返回函数。如何使函数在服务器响应之后返回将返回放入回调函数中: function addrewarddb() { var rval="98"; $.post("db/mkreward.php",{ proid:getURLParameter("id") },function(data){

当此函数执行时,函数返回98而不是99。两个警报显示98,那么99。如何使我的函数返回99。我认为这里的问题是在服务器页面mkreward.php响应之前返回函数。如何使函数在服务器响应之后返回将返回放入回调函数中:

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


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

}

$.post调用是异步的

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

然后,$.post()调用完成后,它会更新变量并发出警报

从:

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


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

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


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


}

您可以使用

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

addrewarddb().complete (function (data){
       alert( data);
       return data;
});

或者等待回调函数获取结果

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

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

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});
查看jquery站点了解详细信息

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;
}