【发布时间】: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);
}
【问题讨论】:
-
您需要提供某种代码。
-
解决什么问题?如果要解决
src为null的问题,请在插入脚本标记之前添加对null的检查。如果您希望能够“捕获”错误,超时是可行的方法。 -
嗨@RoToRa。我已经编辑了我的问题并包含了我目前用来从我的服务器检索 JSONP 数据的代码。谢谢!
-
嗨@Matt!感谢您的输入。你能给我一个小代码示例如何检查
src是否为空吗? -
appendScriptToHead() 函数何时被调用?
标签: javascript ajax jsonp xml-rpc doctype