为什么错误警报不适用于getJSON?

时间:2014-08-23 12:46:21

标签: json

我正在加载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。但是,为什么警报框没有出现?

2 个答案:

答案 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');
  }
});