Javascript JS:何时执行动态插入的脚本?
我想在头部顶部执行一个AJAX调用,完成后,根据AJAX调用的结果插入一个包含其内容的脚本。大概是这样的:Javascript JS:何时执行动态插入的脚本?,javascript,html,dom,Javascript,Html,Dom,我想在头部顶部执行一个AJAX调用,完成后,根据AJAX调用的结果插入一个包含其内容的脚本。大概是这样的: var request = new XMLHttpRequest(); request.open('GET', 'https://mypage.com/'); request.setRequestHeader('Accept', 'application/json'); request.onreadystatechange = function () { if (thi
var request = new XMLHttpRequest();
request.open('GET', 'https://mypage.com/');
request.setRequestHeader('Accept', 'application/json');
request.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
var result = JSON.parse(this.responseText);
if (result.foo === 'bar') {
insertScript('bar');
} else {
insertScript('not bar');
}
}
};
request.send();
}
插入脚本代码:
function insertScript (msg) {
var script = document.createElement("script");
var content = "console.log('" + msg + "');";
var inlineScript = document.createTextNode(content);
script.appendChild(inlineScript);
document.head.appendChild(script);
}
所以现在我想知道:脚本什么时候执行?我希望它尽可能快地执行。它附着在头上。如果dom解析器已经到达主体,该怎么办?它会停止并首先在头部执行新脚本吗?它会呈现所有内容,然后执行脚本吗?它会立即执行脚本。但是,为了安全起见,您可以插入一个自执行函数,如下所示:-
var script = document.createElement("script");
var content = "(function selfCallableFunction(){console.log('" + msg + "');})()";
var inlineScript = document.createTextNode(content);
script.appendChild(inlineScript);
document.head.appendChild(script);
由于
XMLHttpRequest
是异步的,因此已经到达并解析了主体。如果确定它将在head.appendChild
调用期间执行。当您使用DOM时,不会发出带有文档的html。write
,解析器的当前状态是什么并不重要。很高兴知道!所以实际上,我把脚本放在哪里也无关紧要,我是把它插入头部还是身体?使用自执行函数有什么更安全?防止变量重写?自执行方法始终是更好的方法。它创建一个闭包范围并防止变量名冲突。