$ getJSON .fail没有开火

时间:2015-09-23 19:50:25

标签: jquery ajax getjson flickr

无法提醒$ 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之外,一切都很完美。如果我弄乱了网址,没有任何反应,只能获得失败的ajax调用的控制台错误。我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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