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

why ajax error is different in IE and Chrome?

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

<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>

上面使用的url是一个non-existant/invalid。现在让我们看看上面代码在不同浏览器中的输出是什么:

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

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

所以问题是为什么我们会收到不同的错误消息?

我们从哪里开始。

我们的回答目标是 ajax 程序员还是非常有经验的程序员? - 这里实际上问的是什么?

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

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

一个浏览器指出您超时,另一个浏览器无法解析接收到的数据,无法调用 jquery 函数,负责这样做...

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

恕我直言,最可能的原因是您从服务器收到的数据实际上不是 jsonp.. 类型,或者不完整或损坏。 可能是文字?或 xml?或者只是简单明了 json.

尝试将类型更改为文本,然后查看错误消息是否有变化。

  • 但是...为什么 chrome 不会给出与 IE 相同的错误?

好吧,如果我对数据实际上不正确 jsonp 的看法是正确的,那么它可能与 jquery "parses" json 时发生的情况有关。 Jquery会使用浏览器内置的方法(可用时),一个可能的原因是chrome用于解析数据,但是当出错时,它会超时

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

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

阅读可能需要很长时间,因为不同版本的 I.E 和 Chrome 的行为不同。在过去,我们必须学习这个才能让最简单的跨浏览器工作。 Jquery 隐藏了大部分差异,这是我对 jquery 成功的最好赌注。我们不再需要了解所有这些细微差别。当出现问题时,我们只需要知道去哪里找..

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

Where the browser provides a native implementation of JSON.parse,