前不久写的一个XMLHttpRequest封装类。加上了一个请求池,并可以添加多个事件监听器

window.reqObjPool = new ReqObjPool();
function    ReqObjPool(){// Request Object Pool
    this.pool = new Array();
    this.getReqObj=function(){
        var micXhrV = ["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];//micsoft XMLHttpRequest Verstion
        var xhr = this.pool.pop();//XMLHttpRequest
        if(xhr==null){
            if (Browser.IE)
                for(var v in micXhrV)try{xhr=new ActiveXObject(micXhrV[v]);break;}catch(e){}
            else
                xhr=new XMLHttpRequest();
        }
        return xhr;
    }
    this.getBackReqObj=function(xhr){this.pool.push(xhr);xhr.abort();}
}

function    HttpRequest(){
    this.isAsync = true;
    this.ll = new Array();//listener List
    this.addListener=function(listener){this.ll.push(listener);}
    this.clearListener=function(){this.ll.length=0;}
    function send(ll,xhr,url,method,args,isAsync){
        xhr.onreadystatechange=function(){
            for(var v in ll)ll[v](xhr);
            if(xhr.readyState==4||xhr.readyState==0)reqObjPool.getBackReqObj(xhr)
        }
        xhr.open(method,url,isAsync);
        xhr.send(args);
    }
    this.post=function(url,args){send(this.ll,reqObjPool.getReqObj(),url,"POST",args,this.isAsync);}
    this.get=function(url){send(this.ll,reqObjPool.getReqObj(),url,"GET",null,this.isAsync);}
}

/*----------------------------------------------*/
*使用举例:
*var hr = new HttpRequest();
* hr.addListener(function(xhr){if(xhr.readyState==4)alert(xhr.resposeText);});
*hr.get("getUserName.do","userId=11");
*
*------------------------------------------------*/

在此推荐一下:  饰装修评价推荐查询网 http://www.zhuangxiu007.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: XMLHttpRequest可以用来封装一个http请求函数,可以通过XMLHttpRequest.send()方法来发送请求XMLHttpRequest.onreadystatechange()方法可以获取调用结果。 ### 回答2: XMLHttpRequest是一种浏览内置的JavaScript对象,用于发起HTTP请求并处理响应。可以使用XMLHttpRequest封装一个http请求函数,并返回调用结果。 首先,创建一个XMLHttpRequest对象: ```javascript var xhr = new XMLHttpRequest(); ``` 然后,定义一个回调函数来处理响应: ```javascript xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var response = xhr.responseText; // 处理响应 console.log(response); } }; ``` 接下来,使用open方法设置请求方法和URL,并发送请求: ```javascript xhr.open("GET", "http://example.com/api", true); xhr.send(); ``` 在回调函数中,可以对响应进行进一步的处理。如果需要发送带有数据的POST请求,可以在send方法中传递参数: ```javascript xhr.open("POST", "http://example.com/api", true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify(data)); ``` 最后,可以通过将这个封装好的http请求函数进行封装,来用于不同的http请求调用。例如: ```javascript function httpRequest(method, url, data, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var response = xhr.responseText; callback(response); } }; xhr.open(method, url, true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify(data)); } httpRequest("POST", "http://example.com/api", data, function(response) { // 处理响应 console.log(response); }); ``` 这样就可以封装一个http请求函数,并返回调用结果。 ### 回答3: 使用XMLHttpRequest封装一个HTTP请求函数,并返回调用结果的代码如下: ```javascript function httpRequest(url, method, data) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open(method, url, true); xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 300) { resolve(xhr.response); } else { reject({ status: xhr.status, statusText: xhr.statusText }); } }; xhr.onerror = function() { reject({ status: xhr.status, statusText: xhr.statusText }); }; if (method === 'POST') { xhr.setRequestHeader('Content-Type', 'application/json'); } xhr.send(JSON.stringify(data)); }); } // 调用示例 var apiUrl = 'https://api.example.com/data'; var requestData = { name: 'John Doe', age: 25 }; httpRequest(apiUrl, 'POST', requestData) .then(function(response) { console.log('调用成功', response); }) .catch(function(error) { console.error('调用失败', error); }); ``` 这段代码定义了一个`httpRequest`函数,接受三个参数:`url`表示要发送请求URL地址,`method`表示请求的方法(如GET或POST),`data`表示请求的数据。函数通过创建一个新的`XMLHttpRequest`对象,设置请求URL和方法,然后发送请求。当请求成功返回时,通过`resolve`回调函数返回请求结果;当请求失败时,通过`reject`回调函数返回错误信息。在调用时可以使用`then`方法处理请求成功的结果,使用`catch`方法处理请求失败的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值