我正在加载json数据,如下所示
$.getJSON('data.json', function (data, status, xhr) {
if (status === "success") {
myData= data;
} else {
window.alert("Unexpected error happened. Please refresh your browser window to reload the page. Error: " + xhr + status);
}
});
但是,我通过删除json文件来测试它。并期待404结果。 HOwever,没有出现改变消息。在控制台上,它确实为json数据说404。但是,为什么警报框没有出现?
答案 0 :(得分:1)
getJSON段调用成功(即HTTP代码200)和错误(即HTTP非200)。当发生故障时(即非200),它不会被调用。因此,状态永远是'#34;成功"当它被调用时,因为它不是这个回调没有被调用。
您应该考虑转换为使用承诺,因为它更灵活。使用done()方法注册接收200时的代码段,以及收到非200时的fail()方法。试试这个:
$.getJSON('someurl').done( function( data ) {
myData = data;
}).fail( function(jqXHR, textStatus, errorThrown) {
console.log("Unexpected error happened. Please refresh your browser window to reload the page. Error: ", textStatus, " ", errorThrown);
});
在编写调试代码时,还要考虑使用console.log而不是alert。您可以在代码中保留console.log()调用,其中您必须记住alert()以删除它们。
答案 1 :(得分:0)
因为getJSON的回调函数仅在请求成功时才有效。 你应该使用
$.ajax({
statusCode: {404: function() {
alert('page not found');
}
});