我通过HTTP调用我的数据库。由于它与我的应用程序不在同一台服务器上,因此我使用的是JSONP。因此,每次我想从我的数据库查询信息时,我的JavaScript函数都会向DOM树添加另一个脚本标记。当我的应用程序运行一段时间后,源代码充满了SCRIPT标记。
这是我必须接受使用JSONP还是有另一种方式?
答案 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);
}
}