2015-04-03 121 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();