2015-11-03 236 views
0

我想解决我的这个问题:我在window.load上做了两个ajax调用,它看起来像第二个AJAX响应重写第一个函数之前我可以继续它或者我犯了一些错误......无论如何,如果不进行同步调用,我无法解决问题,而且由于显而易见的原因,我不想那么做。第二个AJAX响应重写第一个(JS,JSON)

因此,这里是我的代码(JavaScript)的创建新的XMLHttpRequest:

function createRequest(){ 
    if(window.XMLHttpRequest) 
    return new XMLHttpRequest; 
    else 
    return new ActiveXObject("Microsoft.XMLHTTP"); 
} 

我的发送请求功能(发送它们)

function sendRequest(url, callback){ 
    request = createRequest(); 

    if(typeof callback === 'function'){ 
    request.onreadystatechange = callback(); 
    } 

    request.open("GET", url, true); 
    request.send(); 
} 

,最后我的回调

function handleData(){ 
    return function(){ 
    if (request.readyState == 4 && request.status == 200) { 
     serverResponse = JSON.parse(request.responseText); 

     switch(Object.keys(serverResponse)[0]){ 
      case "a": function1(serverResponse.a,"a"); break; 
      case "b": function2(serverResponse.b,"b"); break; 
     } 
    } 
} 

我正在创建如下电话:

window.onload = function() { 
    sendRequest('url' , handleData); 
    sendRequest('url2', handleData); 
} 

注意:正如您所看到的,这是我的代码的简化版本。 在交换机中,我调用了function1和2,这些函数实际上是处理来自服务器的JSON响应。我正在使用不同的json响应在同一个域上的两个不同url上进行调用。 另外,当我只有一个调用它效果很好(他们都)...问题只发生在我试图使2连续 - 而当我打两个电话只有第二个处理权。这就是为什么我想第一次覆盖。

我试图让两个函数handleData所以用开关有handleData1()handleData2(),而不是单一的handleData(),所以我打电话给他们这样的:

window.onload = function() { 
    sendRequest('url' , handleData1); 
    sendRequest('url2', handleData2); 
} 

,但我碰到的问题,其中第二Ajax响应(总是第二个电话),但只有第二个成功。然后我把console.log(request)在这两个新兴的,而且我只得到JSON的第二个功能尝试与第二个函数进行处理。(一无所知第一个)有时被称为多次像4

顺便说一句handleData2秒功能不取决于来自handleData1的数据。

如果任何问题请不要问:)谢谢

+2

'函数handleData(请求){'期待一个说法,但是你不传递任何它:'回调();'。 'request = createRequest();'创建一个**全局**变量。你不想那样。总是使用'var'。 –

+0

谢谢,我没有意识到,解决我的问题,那个论点是错误的...所以现在我知道为什么我的第二次覆盖第一:D我真的觉得很愚蠢...... – Pauli

回答

0
request = createRequest(); 

创建一个全局变量。每次调用该函数都会覆盖该变量,这正是您正在经历的。

创建一个局部变量和值传递给回调:

var request = createRequest(); 

if(typeof callback === 'function'){ 
    request.onreadystatechange = callback(request); 
} 

// ... 

function handleData(request) { 
    // ... 
} 
相关问题