前端之ajax解析

最近一直有老哥问我,能不能说一下跨域,讲一下前后端通信,其实我就想说一句,这么大的题你让我怎么说,一时半会也说不完,索性就把各种方法拆开来解析,讲一下它们是如何实现通信,自己封装了几个方法,不定时更新~
今天说一下ajax,ajax到现在应该说除了不能跨域,别的通信功能该有的都有了,但是有的老哥只会用API,怎么实现的都不会,这就有点说不过去了。好了下面贴一个封装好的代码

var opt = {
    //这里就是ajax的参数以及回调函数
         url: '',
         type: 'get',
         data: {},
         success: function () {},
         error: function () {},
     };
util.extend(opt, options);
     if (opt.url) {
     //因为ajax是基于XMLHttpRequest对象,在IE低版本中是基于
     //ActiveXObject,首先要做兼容性判断,如果浏览器存在
     //XMLHttpRequest对象,则new一个XMLHttpRequest对象,如果不存
     //在则创建一个ActiveXObject对象
         var xhr = XMLHttpRequest
            ? new XMLHttpRequest()
            : new ActiveXObject('Microsoft.XMLHTTP');
         var data = opt.data,
             url = opt.url,
             type = opt.type.toUpperCase(),
             dataArr = [];
         for (var k in data) {
             //将需要传递数据封装
             dataArr.push(k + '=' + data[k]);
         }
         //判断get或者post方法,当然还有别的方法我暂时没写
         if (type === 'GET') {
             url = url + '?' + dataArr.join('&');
             //打开ajax连接
             xhr.open(type, url.replace(/\?$/g, ''), true);
             //发送数据
             xhr.send();
         }
         if (type === 'POST') {
             xhr.open(type, url, true);
             //定义请求头可以忽略
             xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
             xhr.send(dataArr.join('&'));
         }
         //响应onload事件(也就是请求成功)
         xhr.onload = function () {
             if (xhr.status === 200 || xhr.status === 304) {
                 var res;
                 if (opt.success && opt.success instanceof Function) {
                     res = xhr.responseText;
                     if (typeof res ==== 'string') {
                     //这里返回数据类型可以自己定义,比如jquery的
                     //xml,json等
                         res = JSON.parse(res);
                         opt.success.call(xhr, res);
                     }
                 }
             } else {
             //请求失败
                 if (opt.error && opt.error instanceof Function) {
                     opt.error.call(xhr, res);
                 }
             }
         };
     }
 };

原理就是如此简单,过几天不定时讲一下jsonp的实现原理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值