jquery值不更新

时间:2013-01-02 09:14:29

标签: javascript jquery

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.how使我的函数返回99.i认为这里的问题是来自服务器页面mkreward的响应之前的函数returnig。 php.how我可以在服务器响应之后使函数返回

5 个答案:

答案 0 :(得分:4)

$ .post调用是异步的。

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

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

来自jquery docs

  

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

答案 1 :(得分:2)

将回报放入回调函数:

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


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


}

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

您可以使用

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

或等待回调函数获取结果

答案 4 :(得分:1)

这是因为 $.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;
}

查看jquery网站了解详情。