JSONP and DOCTYPE Errors

JSONP and DOCTYPE Errors

本文关键字:Errors DOCTYPE and JSONP      更新时间:2023-09-26

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

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

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

到目前为止还不错。

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

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

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

在此链接中引用答案:

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

很有用的东西。基于所有这些,我从上面得出的结论是,每当我的服务器响应缓慢时,<script>标记的src属性都是null。由于这抛出了一个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);  
}

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

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