让我们以下面的代码为例。
<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
那么我们为什么会收到不同的错误消息呢?
答案 0 :(得分:0)
我们从哪里开始。
我们是否首先针对ajax程序员或非常有经验的程序员提供答案? - 这里实际问的是什么?
简单的答案是显而易见的。浏览器是不同的,因此它们以不同的方式对错误做出反应,传播到jquery,最终导致两个不同的错误消息。 由于jquery根据javascript引擎包装了浏览器,因此它并不总是能够以完全交叉浏览器的方式运行。
然而那真的不是你现在要问的是它吗? 你可能想知道出了什么问题..
一个浏览器声明您有超时,另一个浏览器无法解析收到的数据,并且无法调用jquery函数,这样做是负责任的......
您可能想要阅读此相关问题: Callback - Parseerror JSONP via jQuery AJAX
最可能的原因IMHO是您从服务器接收的数据实际上不是jsonp类型的..或者它是不完整的或破坏的。 它可能是文字吗?还是xml?或者只是简单而简单的json。
尝试将类型更改为文本,并查看错误消息是否更改。
有很多地方需要了解这一点所需的文档。要对所有类型的数据和可能的错误进行一般性解释,请分别参考Jquery源代码和I.E和Chrome的javascript引擎文档。
可能需要很长时间才能阅读,因为不同版本的I.E和Chrome的行为不同。在过去,我们必须学习这一点,以使最简单的crossbrowser工作。 Jquery隐藏了大部分差异,这是我对jquery成功的最好选择。我们不再需要了解所有这些微妙的差异。当出现问题时,我们只需要知道在哪里看..
一个好的起点是:http://api.jquery.com/jquery.parsejson/
浏览器提供
JSON.parse
的本机实现,