猿问

jQuery ajax(jsonp)忽略超时并且不会触发错误事件

jQuery ajax(jsonp)忽略超时并且不会触发错误事件

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

因为$ .getJSON只是$ .ajax的包装,所以我决定改写这个东西并惊喜,它完美无缺。

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

这是代码:

$(document).ready(function(){

    // var jsonFeed = "http://api.flickr.com/services/feeds/photos_public.gne"; // correct URL
    var jsonFeed = "http://api.flickr.com/services/feeds/photos_public.gne_______"; // this should throw a 404

    $.ajax({
        url: jsonFeed,
        data: { "lang" : "en-us",
                "format" : "json",
                "tags" : "sunset"
        },
        dataType: "jsonp",
        jsonp: "jsoncallback",
        timeout: 5000,
        success: function(data, status){
            $.each(data.items, function(i,item){
                $("<img>").attr("src", (item.media.m).replace("_m.","_s."))
                          .attr("alt", item.title)
                          .appendTo("ul#flickr")
                          .wrap("<li><a href=\"" + item.link + "\"></a></li>");
                if (i == 9) return false;
            });
        },
        error: function(XHR, textStatus, errorThrown){
            alert("ERREUR: " + textStatus);
            alert("ERREUR: " + errorThrown);
        }
    });});

我想补充说,当jQuery版本为1.4.2时,会问这个问题


隔江千里
浏览 608回答 3
3回答

慕标琳琳

jQuery 1.5及更高版本可以更好地支持JSONP请求的错误处理。但是,您需要使用该$.ajax方法而不是$.getJSON。对我来说,这有效:var req = $.ajax({     url : url,     dataType : "jsonp",     timeout : 10000});req.success(function() {     console.log('Yes! Success!');});req.error(function() {     console.log('Oh noes!');});超时似乎可以解决问题并在10秒后没有成功请求时调用错误处理程序。

宝慕林4294392

一个解决方案,如果你坚持使用jQuery 1.4:var&nbsp;timeout&nbsp;=&nbsp;10000;var&nbsp;id&nbsp;=&nbsp;setTimeout(&nbsp;errorCallback,&nbsp;timeout&nbsp;);$.ajax({ &nbsp;&nbsp;&nbsp;&nbsp;dataType:&nbsp;'jsonp', &nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearTimeout(id); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;}});
随时随地看视频慕课网APP

相关分类

JQuery
我要回答