每次与JSONP通话时,是否必须创建新的SCRIPT标签?

时间:2012-03-10 22:32:29

标签: javascript json dom jsonp

我通过HTTP调用我的数据库。由于它与我的应用程序不在同一台服务器上,因此我使用的是JSONP。因此,每次我想从我的数据库查询信息时,我的JavaScript函数都会向DOM树添加另一个脚本标记。当我的应用程序运行一段时间后,源代码充满了SCRIPT标记。

这是我必须接受使用JSONP还是有另一种方式?

3 个答案:

答案 0 :(得分:1)

这取决于浏览器,但一般来说,是的。您必须添加新的脚本标记。但是,您可以在加载脚本后删除脚本dom元素。如果您正在使用jQuery,它会为您解决这个问题 - 您需要使用的方法在某种程度上取决于浏览器。

如果您使用的是Visual Studio,即使删除了该脚本,您仍会在调试器中看到对该脚本的引用。据我所知,在生产模式中,这并不意味着存在“泄漏”。

答案 1 :(得分:1)

是的,这只是JSONP的一个问题。您可以将onload处理程序附加到script元素,以便在完成后对其进行清理(对于IE,onreadystatechange)。

或者,由于您控制两台服务器,因此可以使用CORS。这比JSONP更少,并提供XMLHttpRequest的灵活性。

答案 2 :(得分:0)

收到JSONP回复后,我删除了script标记。例如:

function makeJSONPRequest() {
    var script = document.createElement('script');
    var callbackName = 'callback' + (+new Date()) + '_' + Math.floor(Math.random() * 10000);
    script.type = 'text/javascript';
    script.src = 'http://www.example.com/jsonp?callback=' + callbackName;
    window[callbackName] = callback;
    document.head.appendChild(script);
    function callback(data) {
        delete window[callbackName];
        document.head.removeChild(script), script = null;
        console.log(data);
    }
}