2015-04-03 120 views
0

我正在爲一個項目創建一個JavaScript庫,這樣做會根據您輸入的參數進行其他調用。這是該項目的第二天,我正在尋找建議。如果我將我的請求設置爲異步,它會返回我的請求,但我無法訪問該對象值,如果在調用中將其設置爲false,則會返回對象。Acync JS HTTP請求諮詢請求

我讀了異步JS請求堆棧的文章,我似乎無法環繞回調,並許諾我的頭。

這個工程: request.open( 「刪除」,網址,虛假的);

這並不: request.open( 「刪除」,網址,真實);

(function(window){ 
    function defineCynergi(){ 
      var Cynergi = {}; 
      Cynergi.get = function(url){ 
       var request = makeHttpObject(); 
       request.open("GET", url, false); 
       request.send(null); 
       return JSON.parse(request.responseText);     
      } 
      Cynergi.delete = function(url){ 
       var request = new XMLHttpRequest(); 
       request.open("DELETE", url, false); 
       request.setRequestHeader('Accept', 'application/localhost.com:3000+json; version=1'); 
       request.send(); 
       deleteStatus = request.statusText; 
       return deleteStatus; 
      } 

      Cynergi.insert = function(url, data){ 
       var request = new XMLHttpRequest(); 
       request.open("POST", url, false); 
       request.setRequestHeader('Accept', 'application/localhost.com:3000+json; version=1'); 
       request.send(JSON.stringify(data)); 
       sentStatus = request.statusText; 
       return sentStatus; 
      } 

      Cynergi.update = function(url, data){ 
       var request = new XMLHttpRequest(); 
       request.open("PATCH", url, false); 
       request.setRequestHeader('Accept', 'application/localhost:3000+json; version=1'); 
       request.send(JSON.stringify(data)); 
       updateStatus = request.statusText; 
       console.log(request); 
       return updateStatus; 
      } 

      return Cynergi; 
     } 

    if(typeof(Cynergi) === 'undefined'){ 
     window.Cynergi = defineCynergi(); 
    } 

})(window); 

function makeHttpObject() { 
    try {return new XMLHttpRequest();} 
    catch (error) {} 
    try {return new ActiveXObject("Msxml2.XMLHTTP");} 
    catch (error) {} 
    try {return new ActiveXObject("Microsoft.XMLHTTP");} 
    catch (error) {} 

    throw new Error("Could not create HTTP request object."); 
} 

回答

0

你應該做這樣的事情:

var request = new XMLHttpRequest(); 
request.open('GET', yourURI, true); // true = async 
request.send(); 

request.onreadystatechange(function() { 
    if(request.readyState === 4){ 
     /*ENTER CODE THAT SHOULD BE EXECUTED WHEN REQUEST IS DONE 
     (OPTIONAL)*/ 

     switch(request.status) { 
      case 200: //DO STUFF 
      case 404: //DO OTHER STUFF 
     } 
    } 
}); 

或者這樣:

var request = new XMLHttpRequest(); 
request.open('GET', yourURI, true); 
request.addEventListener('load', function() { 
    //CODE THAT SHOULD BE EXECUTED WHEN SUCCES. 
}); 
request.addEventListener('error', function() { 
    //CODE THAT SHOULD BE EXECUTED WHEN ERROR RESPONE. 
}); 
request.send();