Jquery揭秘系列:ajax原生js实现详解(推荐)


Posted in Javascript onJune 08, 2016

讲到ajax这个东西,我们要知道两个对象XMLHTTPRequest和ActiveXObject ,提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。可以同步或异步返回 Web 服务器的响应,并且能以文本或者一个 DOM 文档形式返回内容。XMLHTTPRequest基本上算是标准化了,兼容大部分浏览器ActiveXObject这玩儿意儿是微软的东西,所以是为了兼容IE版本,我们用的只是它的xmlHTTP功能。

为了功能的明确和清晰,我们把这个ajax代码分为5个部分:

•对象的创建

•onreadystatechange句柄处理

•参数拼接

•Get功能实现

•Post功能实现

1.对象的创建 :

首先创建用作 XMLHttpRequest 对象的 XMLHttp 变量。把它的值设置为 null。

按照 web 标准创建对象 (Mozilla, Opera 以及 Safari):XMLHttp=new XMLHttpRequest()

按照微软的方式创建对象,在 Internet Explorer 6 及更高的版本可用:XMLHttp=new ActiveXObject("Msxml2.XMLHTTP")

如果捕获错误,则尝试更老的方法 (Internet Explorer 5.5) :XMLHttp=new ActiveXObject("Microsoft.XMLHTTP")

var xhrFactory = function () {
    this.init.apply(this, arguments);
   }
   xhrFactory.prototype = {
    init: function () {
     this.xhr = this.create();
    },
    create: function () {
     var xhr = null;
     try {
      if (window.XMLHttpRequest) {
       xhr = new XMLHttpRequest();
      }
      else if (window.ActiveXObject) {
       xhr = new ActiveXObject("Msxml2.Xmlhttp");
      }
     }
     catch (err) {
      xhr = new ActiveXObject("Microsoft.Xmlhttp");
     }
     return xhr;
    }
}

2.onreadystatechange句柄:

readystate: function (timeout,callback) {
     this.xhr.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
       callback(eval("(" + this.responseText + ")"));
      }
      else {
       setTimeout(function () {
        this.xhr.abort();
       }, !timeout ? 15000 : timeout);
      }
      
     }
    }

这里面要说一下readyState和status属性。

readyState:

1.创建MLHTTP对象  
2.打开与服务器的连接 
3.发送指令  
4.等待处理请求结果  。

status:

200.请求成功  
400.请求错误。。。
还有很多值 ,这里就不一个个说了。

timeout参数是请求过期时间  
callback参数,回调对返回数据做了处理,转换成对象。

3.参数拼接

para: function (data) {
     var datastr = "";
     if (data && Object.prototype.toString.call(data) == "[object Object]") {
      for (var i in data) {
       for (var i = 0; i < length; i++) {
        datastr += i + "=" + data[i] + "&";
       }
      }
     }
     return datastr;
    }

这里是将传入的对象参数拼接成字符窜,用于ajax请求时发送参数。

4.Get功能实现:

get: function (url, data, callback, async, timeout) {
     this.readystate(timeout, callback);
     var newurl = url;
     var datastr = this.para(data);
     newurl = url + "?" + datastr;
     this.xhr.open("get", newurl, !async ? true : async);
     this.xhr.send(null);
    }

get 请求,发送的参数是直接在url上拼接的,而不是在send里面发送,而post方式参数则是在send里面发送。

5.Post功能实现

post: function (url, data, callback, async, timeout) {
     this.readystate(timeout, callback);
     var newurl = url;
     var datastr = this.para(data);
     this.xhr.open("post", newurl, !async ? true : async);
     this.xhr.setRequestHeader("content-type", "x-www-form-urlencoded");
     this.xhr.send(!datastr ? null : datastr);
    }

post这里面多了一段代码:this.xhr.setRequestHeader("content-type", "x-www-form-urlencoded");

这段代码其实是说明将整个发送内容作为一个整体进行编码,get则是单个参数进行编码拼接 ,这也是post和get的区别。

调用方式如下 :

var xhr = new xhrFactory();
   xhr.post("test.ashx", null, function (data) {
    alert(data);
   });

以上这篇Jquery揭秘系列:ajax原生js实现详解(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery的链式调用浅析
Dec 03 Javascript
JS获取后台Cookies值的小例子
Mar 04 Javascript
解析页面加载与js函数的执行 onload or ready
Dec 12 Javascript
jquery禁用右键示例
Apr 28 Javascript
纯JS实现旋转图片3D展示效果
Apr 12 Javascript
jQuery获得子元素个数的方法
Apr 14 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
May 06 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
Nov 17 Javascript
JSONP跨域请求实例详解
Jul 04 Javascript
javascript 中的try catch应用总结
Apr 01 Javascript
JS实现的走迷宫小游戏完整实例
Jul 19 Javascript
element-ui 表格实现单元格可编辑的示例
Feb 26 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
Jun 08 #Javascript
Js+Ajax,Get和Post在使用上的区别小结
Jun 08 #Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 #Javascript
JS与Ajax Get和Post在使用上的区别实例详解
Jun 08 #Javascript
浅谈JS原生Ajax,GET和POST
Jun 08 #Javascript
原生 JS Ajax,GET和POST 请求实例代码
Jun 08 #Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
Jun 08 #Javascript
You might like
php编写简单的文章发布程序
2015/06/18 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
Python操作Jira库常用方法解析
2020/04/10 Python
pyspark 随机森林的实现
2020/04/24 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
详解Python中的路径问题
2020/09/02 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
新年晚会主持词
2014/03/24 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
未中标通知书
2015/04/17 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
Python道路车道线检测的实现
2021/06/27 Python
关于python类SortedList详解
2021/09/04 Python