javascript-单个页面中有两个xmlHttpRequests

我对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之类的东西?编写能够跨浏览器工作的脚本很难做得很好,这些框架为您带来了很多麻烦.

上一篇:javascript-Node.js下载并执行外部脚本


下一篇:内部调用XMLHttpRequest的javascript类,然后处理onreadystatechange