我正在尝试在函数中使用$ .post,获取结果,然后根据$ .post回调的结果返回true或false函数。但是,回调似乎发生在父函数的返回事件之后。
这是当前代码,ret变量总是未定义但如果我在$ .post回调中警告它()它会返回正确的结果;
function elementExists(key, type, path, appid, pid){
var ret;
$.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
ret = data;
});
alert(ret);
return ret;
}
答案 0 :(得分:2)
正如您所发现的那样,帖子是异步完成的。如果您希望它是同步的,则需要使用ajax
方法并将async
参数设置为false。但是,最好确认该帖子是异步的并构建您的代码,以便回调执行的操作独立于调用post的方法。显然,你真的想做除警报之外的其他事情,但不知道如何重构这一点很难建议。
编辑:我了解您的代码正在检查是否存在某些内容,但它正在检查是否有用。如果我们知道目的是什么,那么可以建议如何在回调中完成该操作,以便可以重构该方法。
答案 1 :(得分:1)
function elementExists(key, type, path, appid, pid){
$.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
alert(data);
});
}
函数(data)是一个回调(Asynchronous),你不能返回那样的值。
在调用完页面之前不调用回调函数,但在调用$ .post后立即执行“return ret”
如果要将其设置为syncronous set async:false
查看文档 http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype
答案 2 :(得分:0)
问题是您的代码是异步执行的。这就是在ret = data之前实际调用alert(ret),这在Ajax请求完成时发生。
您可以使用async选项使ajax调用同步(不推荐),也可以重新设计代码。