$getJSON .fail 不触发

$getJSON .fail not firing

无法提醒 $getJSON .fail:

this.flickrPics = ko.observableArray();
ko.computed(function() {

    $.getJSON(
        'https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?',
        {
            tags : data.name,
            format : 'json'
        })
    .done(function(response) {
            for (var i = 0; i < 10; i++) {
                self.flickrPics.push(response.items[i].media.m);
            }
    })
    .fail(function(error) {
        alert(error + 'error');
        // $('.pics-box h2').text("sorry, pictures cant be loaded at the moment");
    });

}, this);

除 .fail 外,一切正常。如果我搞砸了 url,什么也不会发生,只会收到失败的 ajax 调用的控制台错误。我做错了什么?

为了保持与旧版浏览器的兼容性,jQuery 1.11.x 使用 .onreadystatechange 来跟踪 jsonp 请求何时返回。因此,在发送脚本或 jsonp 请求时,无法跟踪超时错误以外的错误。

要解决这个问题,您应该在现代浏览器中使用 jQuery 2.x,而在旧版浏览器中只包含 1.11.x,这样您的大多数用户将获得更好的错误处理。为其他用户修复它的唯一方法是不使用 jQuery 发送此请求,而是自己创建脚本标签并找到一种跟踪 success/error 的方法,该方法适用于所有支持的浏览器。或者您可以使用您的服务器代理此请求并执行正常的 XMLHTTP 请求。

https://github.com/jquery/jquery/blob/1.11.3/src/ajax/script.js#L57

https://github.com/jquery/jquery/blob/2.1.3/src/ajax/script.js#L44