【问题标题】:JSONP and DOCTYPE ErrorsJSONP 和 DOCTYPE 错误
【发布时间】:2012-07-12 19:47:42
【问题描述】:

我遇到了一个奇怪的问题。

我正在使用 AJAX 与我的服务器通信。 (我在localhost 上运行我的网络应用程序)。 服务器位于http://www.example.com

为了绕过同源策略,我使用 JSONP。我动态创建了一个<script> 标签并从我的服务器加载数据。

到目前为止一切顺利。

然后我决定将我的网络应用程序上传到这个子域:http://m.example.com

那是我遇到疯狂错误的时候。有时页面加载,有时不加载。当它不加载时,Firebug 会抛出 DOCTYPE 错误。

我做了一些研究,发现了这个 stackoverflow 帖子:firebug returns syntax error in doctype?

引用此链接中的答案:

这通常是因为您将 HTML 文档作为脚本加载。这通常是由<script src=""></script>(即指向当前、HTML、文档的相对URI)或指向404错误的脚本之一引起的。

非常有用的东西。基于所有这些,我从以上所有内容中得出结论,每当我的服务器响应缓慢时,<script> 标签的src 属性为空。由于这会引发 404 error,因此我在 Firebug 中收到 DOCTYPE 错误。每当我的服务器快速响应时,就没有问题并且一切正常。

我该如何解决这个问题?我可以设置手动超时或其他东西,但这并不是万无一失的优雅解决方案。

有帮助吗?

编辑:

这里有一些代码:

该函数用于动态创建script标签:

function appendScriptToHead() {
    var element = document.createElement("script");  
    element.src = 'http://www.example.com/?data&callback=callfunction'; 
    document.getElementsByTagName("head")[0].appendChild(element) 
}

上述包含JSONP数据的url加载时调用该回调函数:

function callfunction(response) {  
    alert(response);  
}

【问题讨论】:

  • 您需要提供某种代码。
  • 解决什么问题?如果要解决 srcnull 的问题,请在插入脚本标记之前添加对 null 的检查。如果您希望能够“捕获”错误,超时是可行的方法。
  • 嗨@RoToRa。我已经编辑了我的问题并包含了我目前用来从我的服务器检索 JSONP 数据的代码。谢谢!
  • 嗨@Matt!感谢您的输入。你能给我一个小代码示例如何检查src 是否为空吗?
  • appendScriptToHead() 函数何时被调用?

标签: javascript ajax jsonp xml-rpc doctype


【解决方案1】:

我认为这里有一些误解。您的script 元素将始终设置其src 属性,但其内容取决于您的服务器的响应。我怀疑它会是错误 404(因为它指的是未找到的元素,几乎不重复),但它可以是 500 种口味。

我建议按原样调试您的查询(即,使用浏览器或一些脚本 HTTP UserAgent 打开http://www.example.com/?data&callback=%callfunction%,如果您觉得很勤奋),看看选择要加载的脚本的逻辑可能有什么问题.

【讨论】:

  • 嗨@raina77wow。我明白你的意思。我尝试直接在浏览器中打开http://www.example.com/?data&callback=%callfunction%。它返回一个 JSONP 字符串。但服务器响应各不相同。有时它会立即打开,有时它需要一段时间。如何绕过代码中的这种不确定性?
  • 我建议使用in this answer 描述的方法。不过,无需定义额外的变量:您只需检查要加载的函数即可。
猜你喜欢
  • 2021-04-01
  • 2016-06-06
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多