我没有使用框架,我想实现一个架构,其中单个html文件保存我的布局的骨架,并且某些其他html片段被加载到该布局中的各种div中。代码全部位于我的主扩展文件夹/ popup /
中的相同目录位置我想构建一个非常简单的函数来将本地保存的html片段加载到div元素中。这是我的第一次尝试:
function loadView(viewName,destination){
var URL = "/popup/"+viewName;
var client = new XMLHttpRequest();
client.open('GET', URL, false);
client.onreadystatechange = function() {
document.getElementById(destination).innerHTML = client.responseText;
}
client.send();
}
// Example of a call
loadView('contact.html','widgetBox');
显然这很糟糕,因为它依赖于将ajax设置为asynch false。但是在这个解决方案下,这是必要的,因为脚本中的下一行代码可能/确实试图操纵新加载的内容。
什么是达到类似结果的方法,不依赖于ajax? (或至少,这将解决使用asynch false的需要)
注意:
答案 0 :(得分:2)
您应该让loadView
函数接受回调作为第三个参数。然后,在Ajax调用完成时调用它。这样,您就可以使用异步请求。
function loadView(viewName, destination, callback){
var URL = "/popup/"+viewName;
var client = new XMLHttpRequest();
client.open('GET', URL);
client.onreadystatechange = function() {
if (client.readyState < 4) return; // Wait until the request completes
document.getElementById(destination).innerHTML = client.responseText;
callback();
}
client.send();
}
// Example of a call
loadView('contact.html', 'widgetBox', function() {
// Do whatever comes next
});