我正在使用AHAH(如此处所述http://microformats.org/wiki/rest/ahah)进行两次调用以在页面上填充HTML。调用在文档准备好之后发生,并且一个接一个地被触发。结果,每次都是第一次调用被最后一次调用响应覆盖。因此,我将在页面上有两个相同的HTML块,而不是两个独特的代码片段。有时第一次通话甚至不会评估它的回叫,因此仍然是空的。
有什么想法吗?
答案 0 :(得分:2)
如果您正在使用该页面上的确切代码,那就不足为奇了,因为该示例使用单个全局变量来存储正在生成的XMLHttpRequest。因此,它无法同时处理多个同时请求:第二次调用该函数会覆盖req
一个新函数,导致req
读取ahahDone
错误请求。
如果你想允许这样做,你必须让req
成为一个局部变量(在var
中声明function ahah()
),并将其传递给target
到ahahDone()
函数。或者只是内联:
function Element_loadHTML(element, url) {
var req= null;
if (window.XMLHttpRequest) {
req= new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
req= new ActiveXObject('MSXML2.XMLHttpRequest');
} catch() {}
}
if (!req) {
element.innerHTML= 'Browser does not support XMLHttpRequest';
return;
}
element.innerHTML= 'Loading...';
req.onreadystatechange= function() {
if (req.readyState===4)
element.innerHTML= req.status===200? req.responseText : 'Error '+req.status;
};
req.open('GET', url);
req.send(null);
}
Element_loadHTML(document.getElementById('appdata'), 'appdata.part.html');
Element_loadHTML(document.getElementById('foo'), 'bar.part.html');
浏览器嗅探并尝试执行脚本标记的东西是绝望和破碎的;不要使用它。将<script>
元素内容加载到页面中是不好的做法。