【问题标题】:Deferred failed callback not calling延迟失败的回调未调用
【发布时间】:2011-09-02 03:45:42
【问题描述】:

我试图弄清楚为什么失败的回调不适用于这个延迟

http://jsfiddle.net/austinbv/wzve6/6/

get_each_total = function(callback) {
    var requests;
    requests = [];
    var url;
    url = "http://otter.topsy.com/search.js?callback=?&apikey=38A260E9D12A4908B1AF9184B691131&q=justin+bieber&window=d";
    requests.push($.getJSON(url, function(data) {}));
    $.when.apply($, requests).then(function() {
        callback();
    }, function() {
        alert("There was an error communicating with a remote library, try again in a few");
    });
};

get_each_total_broken = function(callback) {
    var requests;
    requests = [];
    var url;
    url = "http://otter.topsy.com/hjhkl/sehjkhhkjhkarch.js?callback=?&apikey=38A260E9D12A4908B1AF9184B691131&q=justin+bieber&window=d";
    requests.push($.getJSON(url));
    $.when.apply($, requests).then(function() {
        callback();
    }, function() {
        callback();
    });
};

$(function() {
    get_each_total_broken(function() {
        alert("fail");
    });
});

我有一个类似的问题Jquery deferred call back oddness,但我认为这已经足够不同了,它应该有它自己的。再次感谢任何帮助

编辑

在 jQuery irc 中说话之后,看起来我是个 bug!

【问题讨论】:

    标签: jquery jquery-deferred jquery-callback


    【解决方案1】:

    我在另一个question 中发表了评论,但问题是您的网址:它有两个?,它不应该

    url = "http://otter.topsy.com/hjhkl/sehjkhhkjhkarch.js?callback=?&apikey=38A260E9D12A4908B1AF9184B691131&q=justin+bieber&window=d";
    

    应该是

    url = "http://otter.topsy.com/hjhkl/sehjkhhkjhkarch.js?callback=somevalue&apikey=38A260E9D12A4908B1AF9184B691131&q=justin+bieber&window=d";
    

    甚至:

    url = "http://otter.topsy.com/hjhkl/sehjkhhkjhkarch.js"
    $.getJSON(url, {
        "callback": "somevalue",
        "apikey": "38A260E9D12A4908B1AF9184B691131",
        "q": "justin bieber",
        "window": "d"
    }, function(data){ alert("Got: " + data);});
    

    您可以将? url 编码为%3F 或使用第二个版本,jQuery 将为您进行url 编码。

    更新:- 所以我在一个返回普通 500 内部服务器错误的视图上对此进行了测试。它运行良好:错误回调运行良好。

    您的网址返回 500 和自定义 500 错误页面。有没有办法把它关掉再试一次?

    【讨论】:

    • 那个?因为回调是一个 jQuery 技巧,$.getJSON 注意到有一个 'callback=?'然后转呢?进入一个随机生成的 jQuery 函数,然后用作回调 看看你的控制台是否有 xhr 请求,500 来自这个 otter.topsy.com/hjhkl/… URL,它有那个 'callback=?'已更改
    • @austinbv 好的,所以我玩弄了它,最终我发现如果服务器返回 500 错误并重新运行自定义的 500 错误页面,它就不起作用。一定是jquery bug。不过请阅读我的更新。
    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    相关资源
    最近更新 更多