我对ajax相当陌生,但是我正在尝试实现两个简单的调用以使用javascript动态更改页面上的两个单独的div.我一次使用一个调用没有问题,但是当我使用两个调用时,第二个xmlhttprequest似乎接管了第一个并写入两个div中.
我已经阅读并尝试使用其他两个帖子中列出的修复程序,但两种情况似乎都不适合我:
Sending two Ajax requests to two different PHP scripts from single javascript function
Using two xmlhttprequest calls on a page
这是我的相关代码:
function request_handler(url, params, changed_div) {
if(window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
}catch(e) {
req = false;
}
}else if(window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
req = false;
}
}
}
if(req) {
req.onreadystatechange = function(){
if (req.readyState == 4 && req.status == 200){
document.getElementById(changed_div).innerHTML = req.responseText);
}
}
req.open("POST", url, true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(params)
return true;
}
return false;
}
这是使用上述功能的每个请求的基本格式:
request_handler("sample.php", parameters , "sample_div");
抱歉,如果我在这里传递一些简单的信息,我似乎无法使其正常工作.
解决方法:
这个问题
Using two xmlhttprequest calls on a page
确实回答了您的问题.
在request_handler函数中,您使用的是全局变量req,该变量每次调用该函数时都会被覆盖.
如果将其更改为开始:
function request_handler(url, params, changed_div) {
var req;
// Rest of your function
}
您应该发现它有效.在这种情况下,req具有本地范围,因此当您第二次调用request_handler时,不会被覆盖.
如果您打算编写Ajax脚本,我是否也可以建议您强烈考虑使用jQuery,Prototype或Dojo之类的东西?编写能够跨浏览器工作的脚本很难做得很好,这些框架为您带来了很多麻烦.