jQueryAjax(jsonp)忽略超时,不触发错误事件

为了添加一些基本的错误处理,我想重写一段代码,使用jQuery的$.getJSON从Flickr中提取一些照片。这样做的原因是$.getJSON不提供错误处理或超时

由于$.getJSON只是$.ajax的一个包装器,我决定重写这个东西并让它出其不意,它可以完美地工作

但现在乐趣开始了。当我故意导致404(通过更改URL)或导致网络超时(通过未连接到互联网络)时,根本不会触发错误事件。我不知道我做错了什么。非常感谢你的帮助

代码如下:

$(文档).ready(函数(){
//var jsonFeed=”http://api.flickr.com/services/feeds/photos_public.gne“;//正确的URL
var jsonFeed=”http://api.flickr.com/services/feeds/photos_public.gne_______“;//这应该抛出一个404
$.ajax({
url:jsonFeed,
数据:{“lang”:“en us”,
“格式”:“json”,
“标签”:“日落”
},
数据类型:“jsonp”,
jsonp:“jsoncallback”,
超时:5000,
成功:功能(数据、状态){
$.each(data.items,function(i,item){
$(“<img>”)attr(“src”,(item.media.m)。替换(“\u m.”,“\u s.”)
.attr(“alt”,项目名称)
.appendTo(“ul#flickr”)
.wrap(“<li><a href=\”+item.link+“\”></a></li>”;
如果(i==9)返回false;
});
},
错误:函数(XHR、textStatus、errorshown){
警报(“错误:+textStatus”);
警报(“ERREUR:+errorwornd”);
}
});
});

我想补充一点,这个问题是在jQuery处于1.4.2版时提出的

jQuery1.5和更高版本更好地支持JSONP请求的错误处理。但是,您需要使用$.ajax方法,而不是$.getJSON。对我来说,这很有效:

var req=$.ajax({
url:url,
数据类型:“jsonp”,
超时:10000
});
请求成功(函数(){
log('Yes!Success!');
});
请求错误(函数(){
console.log('Oh noes!');
});

当10秒后没有成功的请求时,超时似乎起到了作用并调用错误处理程序

我也写了一篇关于这个主题的博客

发表评论