$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
无法提醒 $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