【问题标题】:jQuery getScript() sometimes works fine, sometimes returns "parsererror" and TypeError ExceptionjQuery getScript() 有时工作正常,有时返回“parsererror”和 TypeError 异常
【发布时间】: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 包含 parsererrorexceoption 包含 TypeError {}

我真的不知道为什么会这样,因为 10 次中有 9 次都可以正常工作。但是为什么有时会失败,我真的不知道。有人能解释一下这个问题吗?

我会很高兴得到任何提示或帮助。

【问题讨论】:

  • 你是从同一个服务器调用脚本还是从不同服务器调用脚本
  • 检查 Firebug 中的网络流量并查看状态码。我的猜测是某处出现某种 500 服务器错误
  • 我之前在开发者工具中检查过,服务器总是返回正确的文件,200 OK 和正确的 Content-Type
  • 在对我现在已删除的答案的评论中,Frodik 说当错误发生时,他甚至通过比较 MD5 哈希来检查发回的内容!所以发生了一些非常奇怪的事情。
  • 我怀疑您的评估过早。 $.getScript 使用 $.get 然后解析。我认为浏览器在缓冲区准备好之前发出完成信号。如果是这种情况,那么在解析之前屈服应该修复它。修改 jQuery 有点极端,但您可以通过在代码中直接使用 get 和 eval 并使用 setTimeout 调用 eval 来测试这个想法,从而使 XHR 有机会完成编组。

标签: jquery ajax getscript


【解决方案1】:

好的,我找到了解决方案,但我对此并不满意,因为我不知道这个问题的真正原因。

我使用了这个答案中提到的解决方案:https://stackoverflow.com/a/2068597/385264

这不是一个真正的答案,因为我不知道发生了什么以及为什么会发生。我很高兴我让它工作,但我希望有人能解释一下。

我希望,至少,它会帮助有类似问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多