【发布时间】:2013-05-15 09:52:12
【问题描述】:
我对 jQuery(目前是 1.9.1 版本)有一个奇怪的问题,我正在使用 getScript() 函数来按需加载一些额外的 JS 库。它每次都从同一个库加载同一个库,因此多个请求之间没有区别。它总是作为“应用程序/javascript”从服务器返回。对于这些请求,我只使用一个浏览器。
$.getScript(scripts[s], function(){
onScriptLoaded();
}).done(function(script, textStatus) {
console.log(textStatus);
}).fail(function(jqxhr, settings, exception) {
console.log(jqxhr, settings, exception);
});
它通常运行良好,.done() 被调用,textStatus 为success。但是,大约十分之一的请求会失败,并且会调用 .fail() - settings 包含 parsererror 和 exceoption 包含 TypeError {}。
我真的不知道为什么会这样,因为 10 次中有 9 次都可以正常工作。但是为什么有时会失败,我真的不知道。有人能解释一下这个问题吗?
我会很高兴得到任何提示或帮助。
【问题讨论】:
-
你是从同一个服务器调用脚本还是从不同服务器调用脚本
-
检查 Firebug 中的网络流量并查看状态码。我的猜测是某处出现某种 500 服务器错误
-
我之前在开发者工具中检查过,服务器总是返回正确的文件,200 OK 和正确的 Content-Type
-
在对我现在已删除的答案的评论中,Frodik 说当错误发生时,他甚至通过比较 MD5 哈希来检查发回的内容!所以发生了一些非常奇怪的事情。
-
我怀疑您的评估过早。 $.getScript 使用 $.get 然后解析。我认为浏览器在缓冲区准备好之前发出完成信号。如果是这种情况,那么在解析之前屈服应该修复它。修改 jQuery 有点极端,但您可以通过在代码中直接使用 get 和 eval 并使用 setTimeout 调用 eval 来测试这个想法,从而使 XHR 有机会完成编组。