$ .getJSON获取状态

Ale*_*sov 6 jquery getjson http-status-code-404

执行跨域查询,如果运行它的URL不可用,如何执行某个功能(404)?我尝试这样的事情:

$.getJSON({
url:'example.php?callback=?',
statusCode: {
404:function(){alert('404');}
},
success :function(data){//do stuff}
});
Run Code Online (Sandbox Code Playgroud)

tod*_*_fp 30

我发现这种方法可以解决我遇到的类似问题,我希望以不同的方式处理特定的状态代码.例如,'404'代码如下.

$.getJSON(AJAX_URL, function(data) {
    //On Success do something.

}).fail(function(jqXHR) {
    if (jqXHR.status == 404) {
        alert("404 Not Found");
    } else {
        alert("Other non-handled error type");
    }
});
Run Code Online (Sandbox Code Playgroud)

传递给fail方法的参数有3个:

jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});
Run Code Online (Sandbox Code Playgroud)

作为错误回调选项的替代构造,.fail()方法替换了不推荐使用的.error()方法.有关实现的详细信息,请参阅deferred.fail().

有关jQuery文档,请参阅:
http ://api.jquery.com/jQuery.ajax/#jqXHR
http://api.jquery.com/deferred.fail/


Rek*_*nix 0

马特这个问题上发布了一个很好的答案,可以解决您的问题。

您必须success在 JSON 对象上添加一个属性

var success = false;

$.getJSON(url, function(json) {
    success = true;
    // ... do what you need to do here
});

// Set a 5-second (or however long you want) timeout to check for errors
setTimeout(function() {
    if (!success)
    {
        // Handle error accordingly
        alert("Yup, 404"); // string was "Houston, we have a problem."
    }
}, 5000);
Run Code Online (Sandbox Code Playgroud)

如果您不希望出现超时问题,KeYan 通过检查 XHR 状态属性提出了一个很好的建议。我会投票赞成他的解决方案,但我缺乏代表点。