Acync JS HTTP请求通知请求

Acync JS HTTP Request Advice Request

本文关键字:请求 通知 HTTP JS Acync      更新时间:2023-09-26

我正在为我正在做的一个项目创建一个javascript库,该库根据你提供的参数进行rest调用。这是该项目的第二天,我正在寻求建议。如果我将我的请求设置为async,它会返回我的请求,但我无法访问对象值,如果我在调用中将其设置为false,它将返回一个对象。

我阅读了关于async js请求的堆栈文章,似乎无法理解回调和承诺。

这项工作:request.open("DELETE",url,false);

这不会:request.open("DELETE",url,true);

(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.");
}

您应该这样做:

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();