封装ajax工具函数

封装 js 函数时, 通常将形参定义为js对象,通过该对象的属性获取传递的参数。
这样做的好处是: 如果有多个参数,只需要记住参数的名字,不需要记住参数的位置。

因此就用这样的方法来自己封装一个ajax工具函数,与 jQuery 类似的形式,只封进去几个最重要不可缺少的功能。

/*
 * 1. 请求的类型         type    get post
 * 2. 请求地址           url
 * 3. 是异步的还是同步的  async   false true
 * 4. 请求内容的格式      contentType
 * 5. 传输的数据         data    json对象
 *
 * 6.响应成功处理函数     success   function
 * 7.响应失败的处理函数   error     function
 *
 * 这些都是动态参数  参数对象  options
 * */
/*封装一个函数*/
window.$ = {};
/*申明一个ajax的方法*/
$.ajax = function(options){
    if(!options || typeof options != 'object'){
        return false;
    }
    /*请求的类型*/
    var type = options.type || 'get';/*默认get*/
    /*请求地址 */
    var url = options.url || location.pathname;/*当前的地址*/
    /*是异步的还是同步的 */
    var async = (options.async === false)?false:true;/*默认异步*/
    /*请求内容的格式 */
    var contentType = options.contentType || "text/html";
    /*传输的数据 */
    var data = options.data || {};/*{name:'',age:''}*/
    /*在提交的时候需要转成 name=xjj 这种格式*/
    var dataStr = ''/*数据字符串*/
    for(var key in data){
        dataStr += key+'='+data[key]+'&';
    }
    dataStr = dataStr && dataStr.slice(0,-1);
    /*ajax 编程*/
    var xhr = new XMLHttpRequest();
    /*请求行*/
    /*(type=='get'?url+'?'+dataStr:url)判断当前的请求类型*/
    xhr.open(type,(type=='get'?url+'?'+dataStr:url),async);
    /*请求头*/
    if(type == 'post'){
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    }
    /*beforeSend 请求前回调函数*/
    var bool = options.beforeSend && options.beforeSend();
    if(bool === false){
        return false;//如果beforeSend结果为false,就阻断程序
    }
    /*请求主体*/
    /*需要判断请求类型*/
    xhr.send(type=='get'?null:dataStr);
    /*监听响应状态的改变  响应状态*/
    xhr.onreadystatechange = function(){
        /*请求响应完成并且成功*/
        if(xhr.readyState == 4 && xhr.status == 200){
            /*success*/
            var data = '';
            var contentType = xhr.getResponseHeader('Content-Type');
            /*如果我们服务器返回的是xml*/
            if(contentType.indexOf('xml') > -1){
                data = xhr.responseXML;
            }
            /*如果我们的服务器返回的是json字符串*/
            else if(contentType.indexOf('json') > -1){
                /*转化json对象*/
                data = JSON.parse(xhr.responseText);
            }
            /*否则的话他就是字符串*/
            else{
                data = xhr.responseText;
            }
            /*回调 成功处理函数*/
            options.success && options.success(data);
        }
        /*计时请求xhr.status不成功  他也需要的响应完成才认作是一个错误的请求*/
        else if(xhr.readyState == 4){
            /*error*/
            options.error && options.error('you request fail !');
        }
        /*不管通讯成功与否,都会执行complete*/
        options.complete && options.complete();
    }
}
$.post = function(options){
    options.type = 'post';
    $.ajax(options);
}
$.get = function(options){
    options.type = 'get';
    $.ajax(options);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值