2个AJAX命令可以工作,但我只看到最后一个“responseText”

时间:2011-12-29 15:48:17

标签: javascript html ajax xmlhttprequest

我有两个预先形成AJAX调用的JS函数,我想测试它们,所以我创建了两个带有不同id的段落,这些段落将保存响应文本的结果:

<script type="text/javascript">      

    trackApplicationAdded('1139631160', '12445'); //should change test1 paragraph
    trackApplicationRemoved('1139631160'); //should change test2 paragraph

</script> 

<p>Test1: <span id="test1"></span></p>
<p>Test2: <span id="test2"></span></p> 

当我自己运行每个函数(commenting on)时,每个函数都会按预期更改自己的段落,但是当我运行它们时,我只能看到< strong>最后功能。

我有一个创建XMLHttpRequest的函数,它获取变量test,该变量发送应该由每个函数更改的段落id(如上所述,当每个函数都被自己调用时,它正在工作)。 / p>

function sendRequest(url, params, test)
{

 // code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest)
{
    httpRequest=new XMLHttpRequest();
}     
else // code for IE6, IE5
{
    httpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}

httpRequest.open("POST", url, true); 

//Set request headers for POST command//
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
httpRequest.setRequestHeader("Content-length", params.length);
httpRequest.setRequestHeader("Connection", "close");

 httpRequest.onreadystatechange=function()
 {
    if(httpRequest.readyState==4 && httpRequest.status==200)
    {
        //Here you can see "test" which, depends on the function, is test1 or test2//
        document.getElementById(test).innerHTML=httpRequest.responseText;
    }
 }

httpRequest.send(params);

//end when the server will responde we will execute the "document.getElementById("txtHint").innerHTML=xmlhttp.responseText;" //

}

顺便说一句,AJAX通过PHP函数预先形成数据库insert,并且它在任何情况下都能正常工作。重要的是要注意问题只是段落更改而不是服务器中发生的事情。

任何人都知道如何解决这个问题?感谢...

修改

以下是2个函数的代码:

function trackApplicationAdded(fID, fappID) 
{    

var url = "trackApplicationAdded.php";
var params = "facebookID=" + fID + "&facebookApplicationID=" +fappID;

sendRequest(url,params, "test1");  
}


function trackApplicationRemoved(fID) 
{    

var url = "trackApplicationRemoved.php";
var params = "facebookID=" + fID;

sendRequest(url,params, "test2");  
}

1 个答案:

答案 0 :(得分:2)

当您声明“httpRequest”时忘记了var,因此第二个调用会覆盖第一个调用。没有var声明,变量是全局的。

在“sendRequest()”的顶部添加:

var httpRequest;