【问题标题】:Using $.post within a javascript function, cannot assign value to a variable?在 javascript 函数中使用 $.post,不能为变量赋值?
【发布时间】:2009-05-05 11:19:04
【问题描述】:

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

}

【问题讨论】:

    标签: jquery post variables global


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我已经改用 $.ajax 函数了,它很管用。
    【解决方案2】:
    function elementExists(key, type, path, appid, pid){
            $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
               alert(data);
            });
      }
    

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

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

    如果你想设置它同步设置异步:false

    查看文档 http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype

    【讨论】:

    • 我认为 post 不支持设置异步选项。
    • 所有的Ajax调用都做,先调用$.ajaxSetup
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多