【问题标题】:Callback issue with jquery/js/ajaxjquery/js/ajax 的回调问题
【发布时间】:2010-10-10 22:36:48
【问题描述】:

UPDATE3 和 FINAL:感谢 Evan 和 meder!

UPDATE2:我应该澄清一下,我需要调用函数updateFilters (a,b),而不是创建函数。该功能存在于其他地方。很抱歉造成混乱。

下面的代码不能按预期工作 - udpateFilters(a,b)for 循环结束之前被调用。将 async 更改为 false 可以解决问题,但这似乎不对。此外,无论 ajax 是否成功,都会调用 updateFilters()。

我做错了什么?

save (updateFilters(a,b));

function save (cb) {
    $.ajax ({
         url:'save.php',
         data:somedata,
         async:true,
         success: function (response) {
             for (var i in response) {}

             if (typeof cb!='undefined') cb;
    });
}

function updateFilters (a,b) {
//do some stuff here
}

回答: 因此,正如 meder 建议的那样,我更改了参数。这是答案的 2/3!

save (
    (function (a,b) {
        return function () {
            return updateFilters(a,b);
        }
    })(a,b)
);

现在更改以下内容:

if (typeof cb!='undefined') cb (); //brackets are important!

一切顺利!

【问题讨论】:

    标签: javascript jquery ajax callback


    【解决方案1】:

    您正在传递一个函数的调用,而不是应该在以后调用的函数。如果您想要后者,请执行以下操作:

    save (
       (function(a,b){
          return function() {
            return updateFilters(a,b)
          }
       })(a,b)
    );
    

    【讨论】:

    • 谢谢!我试图了解调用的顺序,即何时调用哪个函数。你能帮忙吗?
    • 将警报放入每个具有唯一值的函数中,当您看到这些警报时,您就会知道调用了哪些函数。
    • 那是我的问题。永远不会调用第二次返回的警报。
    • 我的意思是在返回函数 (){alert ('r1');... 永远不会出现之后发出警报
    • 您现在正在引用没有人能够看到的代码。请发布您修改后的警报代码。
    【解决方案2】:

    关于您的更新,您永远不会调用回调。和做的一样

    x; // does nothing
    

    你想调用回调:

    cb(); // invoke the function
    

    【讨论】:

    • 谢谢!我没有意识到括号的重要性!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多