3

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

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

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

到目前为止,一切都很好。

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

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

我做了一些研究,发现了这篇 stackoverflow 帖子:firebug 在 doctype 中返回语法错误?

引用此链接中的答案:

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

很有帮助的东西。基于所有这些,我从以上所有内容中得出结论,每当我的服务器响应缓慢时,<script>标签的src属性为空。由于这会引发,因此我在 Firebug 中404 error遇到错误。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);  
}
4

1 回答 1

1

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

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

于 2012-07-12T11:47:42.240 回答