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我可以在服务器响应之后使函数返回
答案 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网站了解详情。