为什么 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
,
让我们以下面的代码为例。
<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
,