jQuery .then() 和 success block 不能一起工作

jQuery .then() and success block do not work together?

本文关键字:block 不能 一起 工作 success then jQuery      更新时间:2023-09-26

我正在运行jQuery版本1.10.X(是的!我有点慢!(,面对这个奇怪的问题,如果我在 ajax 调用中有一个success块,.then() doneFilterfailFilter

传递内部就不起作用。

然而,在我看来,这似乎是我自己的代码库的问题。证明(.或者也许不是..(?我尝试了一个简单的例子。事情在示例中有效,正如我所期望的那样,successdoneFilter已被排队并执行。

现在在我的代码库中,与上面的例子完全相似,如果我有一个奇怪的success块,.then()部分不会执行。删除成功块可实现.then()并执行doneFilter/failFilter

奇怪的是,在我的同一个代码库中,如果我有 jQuery - 1.7.X,它们都玩得很好。

如果没有,关于如何找出问题是什么的任何提示?我已经检查了用作doneFilterfailFilter的方法。没有语法错误。它们只是包含控制台语句的匿名函数。

法典:

function getMonster (){
    var theMonster = $.ajax({
      url : "http://codepen.io/chriscoyier/pen/difoC.html",
      success : function(data){
        console.log("Monster Succeeded inside 'success' block");
      }
    });    
    return theMonster;
}
var theMonster = getMonster();
theMonster.then (function(){
    console.log("Moster Succeeded outside");
}, function(){
    console.log("Monster Failed  :(");
});

编辑:

我正在做如下ajaxSetup

$.ajaxSetup({
    beforeSend: function(jqXHR) {
        if ($.cookie("mycookie") == null) {
            console.info("Expired Session");
            AppModule.timeout();
            return false;
        }
    }
});

编辑 2 :以前有没有人遇到过这样的问题,或者我是唯一一个看到怪物失败的人?没有抛出一个异常,这使得找出问题所在变得更加困难。

你能尝试使用完成/失败吗,只是为了确保它正常工作:

function getMonster () {
    var theMonster = $.ajax({
      url : "http://codepen.io/chriscoyier/pen/difoC.html",
      success : function(data){
        console.log("Monster Succeeded inside 'success' block");
      }
    });    
    return theMonster;
}
var theMonster = getMonster();
theMonster.done(function(){
    console.log("Moster Succeeded outside");
})
.fail(function(){
    console.log("Monster Failed  :(");
});

并添加"true":

$.ajaxSetup({
    beforeSend: function(jqXHR) {
        if ($.cookie("mycookie") == null) {
            console.info("Expired Session");
            AppModule.timeout();
            return (false);
        }
        return (true);
    }
});

正如我在花费大量时间进行调试后发现的那样,ajax调用的success块中存在逻辑访问问题。我试图访问返回null对象的键,并尝试在循环中使用该方法。

我不确定jQuery是否应该在那里停止执行,因为它允许链接。我找不到解决方案的原因是浏览器控制台没有向我显示任何错误,而是在循环继续进行该特定迭代后停止执行。

我在脑海中问的问题是,即使成功块在某个时候失败,jQuery不应该继续执行.then()回调吗?也许是,也许不是。