0
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.how 的响应之前的函数 returnig我可以让函数在服务器响应后返回

4

5 回答 5

4

$.post 调用是异步的。

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

然后,当 $.post() 调用完成时,它会更新变量并警告 99。

jquery 文档

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

于 2013-01-02T09:18:26.167 回答
2

将返回值放入回调函数中:

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


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


}
于 2013-01-02T09:18:17.517 回答
2

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

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

addrewarddb().complete (function (data){
       alert( data);
       return data;
});
于 2013-01-02T09:18:32.343 回答
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 网站了解详情。

于 2013-01-02T09:56:21.420 回答
1

您可以使用

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});

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

于 2013-01-02T09:19:26.947 回答