1

我试图在函数中使用 $.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;

}
4

3 回答 3

2

正如您发现的那样,帖子是异步完成的。如果您希望它是同步的,则需要使用该ajax方法并将async参数设置为 false。但是,最好承认 post 是异步的并构建您的代码,以便回调执行的操作独立于调用 post 的方法。显然,您确实想做除警报之外的其他事情,但在不知道什么情况下很难建议您如何重构它。

编辑:我知道您的代码正在检查是否存在某些东西,但它是出于某种目的而检查的。如果我们知道目的是什么,那么可能会建议如何在回调中完成它,以便可以重构方法。

于 2009-05-05T11:23:44.617 回答
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);
        });
  }

函数(数据)是一个回调(异步),你不能返回这样的值。

在调用页面完成之前不会调用回调,但是在调用 $.post 后会立即执行“return ret”

如果你想设置它 syncronous set async : false

请参阅文档 http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype

于 2009-05-05T11:21:07.477 回答
0

问题是您的代码异步执行。也就是说,alert(ret) 实际上是在 ret = data 之前调用的,这发生在 Ajax 请求完成时。

您可以使用async选项使您的 ajax 调用同步(不推荐),或者重新设计您的代码。

于 2009-05-05T11:22:11.077 回答