我正在使用 AHAH(如此处所述 http://microformats.org/wiki/rest/ahah )进行两次调用以在页面上填充 HTML。这些调用在文档准备好之后发生,并且一个接一个地被触发。结果每次都是第一个调用被最后一个调用响应覆盖。所以我将在页面上有两个相同的 HTML block ,而不是两个独特的代码段。有时第一次调用甚至没有评估它的回调,因此仍然是空的。
有什么想法吗?
最佳答案
如果您在该页面上使用的代码完全相同,这并不奇怪,因为那里的示例使用单个全局变量来存储正在生成的 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');
浏览器嗅探和尝试执行脚本标签的东西是无望的和 splinter 的;不要使用它。加载 <script>
不是好习惯元素内容到页面中。
关于Javascript 异步调用相互踩踏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303109/