jQuery .then()和成功块不能一起工作?

时间:2014-10-14 13:00:05

标签: javascript jquery ajax promise

我正在运行jQuery版本1.10.X(是的!我有点慢!)并且面对这个奇怪的问题doneFilterfailFilter.then()内部传递不起作用在ajax调用中有一个success块。

然而,在我看来,这与我自己的代码库存在问题。证明(..或者可能不是......)? I tried a simple example。事情在示例中起作用,正如我所料,successdoneFilter已经排队并执行。

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

奇怪的是,在我的代码库中,如果我有jQuery - 1.7.X,它们都会很好用。这可能是一个问题,因为ajax框架在1.8及以上版本中已经发生了变化吗?

如果没有,有关如何弄清问题是什么的任何提示?我已经检查了用作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: 有没有人曾经遇到过这样的问题,或者我是唯一一个看到怪物失败的人?没有一个例外,这使得找出错误更加困难。

2 个答案:

答案 0 :(得分:0)

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

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);
    }
});

答案 1 :(得分:0)

正如我在调试上花了很长时间后发现的那样,success调用的ajax块中存在逻辑访问问题。我试图访问返回null 的对象的密钥,并尝试在循环内使用方法。

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

我在脑海中提出的问题是,即使成功块在某些时候失败,jQuery也不应该执行.then()回调?可能是,可能不是。