我遇到了一个奇怪的问题。
我正在使用AJAX与我的服务器通信。(我的Web应用程序运行在localhost
上)。
服务器位于,比如说,http://www.example.com
为了绕过同源策略,我使用JSONP。我动态创建一个<script>
标签,并从我的服务器加载数据。
到目前为止一切顺利。
然后我决定将我的Web应用程序上传到这个子域:http://m.example.com
这时我遇到了疯狂的错误。有时页面会加载,有时不会。当它无法加载时,Firebug会抛出一个DOCTYPE
错误。
我做了一些研究,并发现了这篇stackoverflow帖子:firebug returns syntax error in doctype?
引用此链接中的一个答案:
这通常是因为你正在将HTML文档作为脚本加载。这通常是由于
<script src=""></script>
(即指向当前HTML文档的相对URI)或指向404错误的脚本之一引起的。
非常有帮助的信息。基于以上所有内容,我得出结论,每当我的服务器响应缓慢时,<script>
标签的src
属性为null。由于这会抛出一个404错误
,所以我在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
的条件。如果你想要能够"捕捉"错误,超时是一个不错的选择。 - Matt