2014-01-19 38 views
0

我想捕獲eAC_callback的返回值,如果它是falsetrueeAConreadystatechange期間調用它時。我可以這樣做嗎?怎麼樣?如何捕獲XMLHttpRequest onreadystatechange函數結果?

function eAC(emailData) { 
    if (window.XMLHttpRequest) { 
     httpRequest = new XMLHttpRequest(); 
    } 

    if (!httpRequest) { 
     return false; 
    } 

    var fd = new FormData(); 
    fd.append("email", emailData); 

    httpRequest.onreadystatechange = eAC_callback; 
    httpRequest.open('POST', "http://example.com/p_PEC.php"); 
    httpRequest.send(fd); 
} 

eAC_callback返回truefalsereadyState is 4status is 200

function eAC_callback() { 
    if (httpRequest.readyState === 4) { 
     if (httpRequest.status === 200) { 
      var response = JSON.parse(httpRequest.responseText); 
      if(response.error === 0){ 
       return true; 
      } else { 
       if(response.error === 1){ 
        return false; 
       } 
       if(response.error === 2){ 
        return false; 
       } 
      }  
     } else { 
      return false; 
     } 
    } 
}; 
+2

歡迎來到** async **的美妙世界!你不能那樣做。 – SLaks

+0

補給它。真? –

+0

使你的ajax調用同步來做到這一點,但同步阿賈克斯會使你的瀏覽器變得非常火,除非firefox – semirturgay

回答

1

我要趕的eAC_callback

返回的值。然後你必須包裝在另一個函數:

httpRequest.onreadystatechange = function() { 
    if (eAC_callback()) { 
     … 
    } else { 
     … 
    } 
}; 

但是,您將永遠無法return在安裝回調函數(很久以前)的異步回調函數eAC中計算出的任何結果。另請參閱How do I return the response from an asynchronous call? - 提供回調或返回承諾。