在同一页面中有多个ajax调用?

时间:2010-12-25 21:32:37

标签: javascript ajax

我有以下代码

function ajaxCall(action,parameters){

if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

}else{// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

//xmlhttp.overrideMimeType('text/html');

xmlhttp.onreadystatechange=function(){

if (xmlhttp.readyState==4 && xmlhttp.status==200){

var rtrv_data=xmlhttp.responseText;

alert(rtrv_data);



}

}
parameters='action=' + action + '&' + parameters;

xmlhttp.open("POST","ajax_calls.php" ,true);

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xmlhttp.setRequestHeader("Content-length", parameters.length);

xmlhttp.setRequestHeader("Connection", "close");

xmlhttp.send(parameters);

}

假设我已经通过某个计时器调用了这个函数,并再次点击了一个名为该函数的页面,我只得到一个输出!一个回应!我能得到2吗?

感谢你。

2 个答案:

答案 0 :(得分:3)

变量“xmlhttp”是全局的(你没有使用“var”)所以这永远不会允许两个同时的ajax调用,因为当第二个调用开始时你将覆盖相同的变量,这是在回调中使用的变量检索数据。

每次存储xml请求对象时都需要创建一个新变量,并且还需要使用闭包来完成回调...类似

var xmltthp = ... // this is a local variable

xmlhttp.onReadyStateChange = function() {
    // here you can use xmlhttp even if it's a local
    // it will be a different variable for each ajax request
}

答案 1 :(得分:1)

谢谢!这对我有用!这样做了:

function refreshpage(){
    var mycode=document.getElementById("bcode").value;
        if (window.XMLHttpRequest){
      xmlhttpf=new XMLHttpRequest();
    }else{
    xmlhttpf=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttpf.onreadystatechange=function(){
        if (xmlhttpf.readyState==4 && xmlhttpf.status==200){
            document.getElementById("zones").innerHTML=xmlhttpf.responseText;
        }
    }
    xmlhttpf.open("GET","ajaxaki.php?code="+mycode,true);
    xmlhttpf.send();
}


function refresh_vehs(){
    var asma=document.getElementById("newasma").value;
        if (window.XMLHttpRequest){
      xmlhttpf_vehs=new XMLHttpRequest();
    }else{
    xmlhttpf_vehs=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttpf_vehs.onreadystatechange=function(){
        if (xmlhttpf_vehs.readyState==4 && xmlhttpf_vehs.status==200){
            document.getElementById("vehicles").innerHTML=xmlhttpf_vehs.responseText;
        }
    }
    xmlhttpf_vehs.open("GET","AJAX_vehicle_cards.php?asma="+asma,true);
    xmlhttpf_vehs.send();
}