为什么ajax错误在IE和Chrome中有所不同?

时间:2015-06-10 06:22:02

标签: javascript jquery ajax error-handling

让我们以下面的代码为例。

<script>
    function abc()
    {
        $.ajax({
            type: "GET",
            url:    "https://zx/abc/def",
            timeout: 6000,
            dataType: "jsonp",
            error: function(h, j, e) {
              console.log(h+"  "+j+"  "+e);
            }
        })
    }
</script>

<button onclick="abc()">Start Call</button>

上面使用的网址是一个不存在/无效的网址。现在让我们看看上面代码在不同浏览器中的输出:

Chrome,firefox, IE 11 ->   [object Object]  timeout  timeout

IE 8,9,10 ->               [object Object]  parsererror  Error: jQuery111308894510177821542_1433915740650 was not called

那么我们为什么会收到不同的错误消息呢?

1 个答案:

答案 0 :(得分:0)

我们从哪里开始。

我们是否首先针对ajax程序员或非常有经验的程序员提供答案? - 这里实际问的是什么?

简单的答案是显而易见的。浏览器是不同的,因此它们以不同的方式对错误做出反应,传播到jquery,最终导致两个不同的错误消息。 由于jquery根据javascript引擎包装了浏览器,因此它并不总是能够以完全交叉浏览器的方式运行。

然而那真的不是你现在要问的是它吗? 你可能想知道出了什么问题..

一个浏览器声明您有超时,另一个浏览器无法解析收到的数据,并且无法调用jquery函数,这样做是负责任的......

您可能想要阅读此相关问题: Callback - Parseerror JSONP via jQuery AJAX

最可能的原因IMHO是您从服务器接收的数据实际上不是jsonp类型的..或者它是不完整的或破坏的。 它可能是文字吗?还是xml?或者只是简单而简单的json。

尝试将类型更改为文本,并查看错误消息是否更改。

  • 但是......为什么chrome没有给出与IE相同的错误?
好吧,如果我认为数据实际上不是正确的jsonp,那么它可能与jquery“解析”json时发生的事情有关。 Jquery将使用浏览器内置的方法(如果可用),可能的原因是chrome用于解析数据,但是当出现问题时,它会超时

  • 我在哪里可以获得文件?

有很多地方需要了解这一点所需的文档。要对所有类型的数据和可能的错误进行一般性解释,请分别参考Jquery源代码和I.E和Chrome的javascript引擎文档。

可能需要很长时间才能阅读,因为不同版本的I.E和Chrome的行为不同。在过去,我们必须学习这一点,以使最简单的crossbrowser工作。 Jquery隐藏了大部分差异,这是我对jquery成功的最好选择。我们不再需要了解所有这些微妙的差异。当出现问题时,我们只需要知道在哪里看..

一个好的起点是:http://api.jquery.com/jquery.parsejson/

  

浏览器提供JSON.parse的本机实现,