js原生创建封装ajax的方法,附XMLHttpRequest状态码

//创建
var gc = gc || {};

gc.ajax = function(options){//options =  {url:'',method:'',data:'',callback:'',async:''}
    //默认参数
    options.url = options.url || '',
    options.method = options.method || 'get',
    options.data = options.data || '',
    options.callback = options.callback || '',
    options.async = options.async || true;
    //get请求-拼接url
    if(options.method.toLowerCase() == 'get'){
        if(typeof options.data == 'object'){
            options.data = [];
            for (var k in options.data){
                options.data.push(k+'='+options.data[k]);
                options.data.join('&');
            }
        }
        options.url += (options.url.indexOf('?' == -1) ? '?' : '') + options.data;
    }
    //post请求-转换字符串
    if(options.method.toLowerCase() == 'post'){
        if(typeof options.data == 'object'){
            var arrs = [];
            for (var k in options.data){
                arrs.push(k+'='+options.data[k]);
            }
            options.data = arrs.join('&');
        }
    }
    //创建发送请求
    var xhr = window.XMLHttpRequest ?  new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); //兼容ie
    xhr.open(options.method,options.url,options.async);
    if(options.method == 'post'){
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        xhr.send(options.data);
    }else{
        xhr.send(null);
    }
    //异步请求
    if(options.async == true){
        xhr.onreadystatechange = function(){
          if(xhr.readyState == 4){
              callcall();
          }
        }
    }
    // xhr.abort(); // 取消异步请求
    //同步请求
    if(options.async == false){
        callcall();
    }
    //返回状态判断
    function callcall(){
        if(xhr.status == 200){
            options.callback(xhr.responseText);
        }else{
            options.callback('error:' + xhr.status + xhr.statusText);
        }
    }
};

//调用
gc.ajax({
    method:'post',
    url:'wz/special/audi/draw.xhtml',
    data:{mobile:'13800000000',memberi:'fwwd',captchaId:'3454353454',seller:'345345'},
    callback:function(res){
        console.log(res)
    }
});

XMLHttpRequest 的readyState状态。从 0 到 4 发生变化

0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪

XMLHttpRequest 对象的 status 和 statusText 属性保存有服务器返回的 http 状态码,不同的是,status 属性保存的状态码是以数字表示的,而 statusText 属性保存的状态码是以字符串表示的。

XMLHttpRequest 对象 status 和statusText 属性对照表
status statusText 说明
0** - 未被始化
1** - 请求收到,继续处理
100 Continue 客户必须继续发出请求
101 Switching protocols 客户要求服务器根据请求转换HTTP协议版本
2** - 操作成功收到,分析、接受
200 OK 交易成功
201 Created 提示知道新文件的URL
202 Accepted 接受和处理、但处理未完成
203 Non-Authoritative Information 返回信息不确定或不完整
204 No Content 请求收到,但返回信息为空
205 Reset Content 服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206 Partial Content 服务器已经完成了部分用户的GET请求
3** - 完成此请求必须进一步处理
300 Multiple Choices 请求的资源可在多处得到
301 Moved Permanently 删除请求数据
302 Found 在其他地址发现了请求数据
303 See Other 建议客户访问其他URL或访问方式
304 Not Modified 客户端已经执行了GET,但文件未变化
305 Use Proxy 请求的资源必须从服务器指定的地址得到
306   前一版本HTTP中使用的代码,现行版本中不再使用
307 Temporary Redirect 申明请求的资源临时性删除
4** - 请求包含一个错误语法或不能完成
400 Bad Request 错误请求,如语法错误
401 Unauthorized 请求授权失败
402 Payment Required 保留有效ChargeTo头响应
403 Forbidden 请求不允许(由于服务器上文件或目录的权限设置导致资源不可用)
404 Not Found 没有发现文件、查询或URl(没有找到指定的资源)
405 Method Not Allowed 用户在Request-Line字段定义的方法不允许
406 Not Acceptable 根据用户发送的Accept拖,请求资源不可访问
407 Proxy Authentication Required 类似401,用户必须首先在代理服务器上得到授权
408 Request Timeout 客户端没有在用户指定的饿时间内完成请求
409 Conflict 对当前资源状态,请求不能完成
410 Gone 服务器上不再有此资源且无进一步的参考地址
411 Length Required 服务器拒绝用户定义的Content-Length属性请求
412 Precondition Failed 一个或多个请求头字段在当前请求中错误
413 Request Entity Too Large 请求的资源大于服务器允许的大小
414 Request-URI Too Long 请求的资源URL长于服务器允许的长度
415 Unsupported Media Type 请求资源不支持请求项目格式
416 Requested Range Not Suitable 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417 Expectation Failed 服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
5** - 服务器执行一个完全有效请求失败
500 Internal Server Error 服务器产生内部错误
501 Not Implemented 服务器不支持请求的函数
502 Bad Gateway 服务器暂时不可用,有时是为了防止发生系统过载
503 Service Unavailable 服务器过载或暂停维修
504 Gateway Timeout 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505 HTTP Version Not Supported 服务器不支持或拒绝支请求头中指定的HTTP版本
12029 an unknown error occurred while processing the request on the server. the status code returned from the server was : 12029 原因:网络不通. 刷新一下就知道了
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用原生 JavaScript 封装 ajax 可以这样做: ``` function ajax(method, url, data, success) { var xhr = new XMLHttpRequest(); xhr.open(method, url, true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { success(xhr.responseText); } else { console.error(xhr.statusText); } } }; xhr.send(data); } ``` 使用方式: ``` ajax( "POST", "/login", "username=admin&password=123456", function(responseText) { console.log(responseText); } ); ``` 其中,method 为请求的方法(POST 或 GET),url 为请求的地址,data 为请求的数据,success 为请求成功时的回调函数。 ### 回答2: 原生js封装Ajax主要由以下几个步骤: 1. 创建一个XMLHttpRequest对象。可以使用var xhr = new XMLHttpRequest();语句来创建一个XMLHttpRequest对象。 2. 设置请求的方法和URL。使用xhr.open(method, url, async)方法来设置请求的方法、URL和是否异步,其中method为请求方法(例如GET或POST),url为请求的URL,async表示是否异步(true为异步,false为同步)。 3. 设置请求的头部信息。使用xhr.setRequestHeader(header, value)方法来设置请求头部信息,可根据需要设置Content-Type、Authorization等等。 4. 监听请求状态变化。使用xhr.onreadystatechange = function(){}语句监听请求状态的变化,当请求状态发生变化时,执行相应的处理。 5. 发送请求。使用xhr.send(data)方法发送请求,其中data为请求的数据,可以为null或者是一个字符串。 6. 处理返回结果。在监听请求状态变化的函数中,根据请求的状态和返回的结果进行相应的处理。例如,当请求状态为4且状态码为200时,表示请求成功,可以通过xhr.responseText获取响应的数据。 7. 销毁XMLHttpRequest对象。请求完成后,使用xhr = null;语句将XMLHttpRequest对象置为空,以便释放内存。 通过以上步骤,就可以封装一个基本的Ajax函数。可以根据需要添加错误处理、超时设置、数据格式转换等功能,以满足不同场景的需求。 ### 回答3: 在原生JavaScript封装Ajax可以通过XMLHttpRequest来实现。下面是一个简单的Ajax封装函数的示例: ```javascript function ajax(method, url, data, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { callback(xhr.responseText); } }; xhr.open(method, url, true); if (method === 'POST') { xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); } xhr.send(data); } ``` 上述函数接受四个参数:请求方法(method)、请求URL(url)、请求数据(data)和回调函数(callback)。其中,method参数可以是'GET'或者'POST',url参数是请求的目标URL,data参数是要发送的数据(如果是'POST'请求),callback参数是请求成功后要执行的回调函数。 函数内部创建了一个XMLHttpRequest对象,并通过onreadystatechange事件监听请求的状态变化。当请求状态为4且状态码为200时,表示请求已完成,可以获取到返回的数据,此时调用回调函数。 使用open方法打开请求,参数为请求方法、URL和是否异步请求。如果是POST请求,还需要调用setRequestHeader方法设置请求头的Content-Type。 最后,调用send方法发送请求数据。根据请求方法不同,send方法的参数也不同。 通过上述封装,可以方便地使用原生JavaScript进行Ajax请求,并根据请求结果执行相应的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值