博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如果不用jQuery,Ajax你还能写出多少?
阅读量:7113 次
发布时间:2019-06-28

本文共 1731 字,大约阅读时间需要 5 分钟。

 许久之前发过一篇关于Ajax的博客,通篇讲的都是通过jQuery编写Ajax,可能因为jQuery在这方面做的实在太好,以至于突然发现不用jQuery的话自己都模糊了Ajax的写法,这里重温一下.

    First - 我们明确在使用jQuery的Ajax忽略掉的问题,那就是Ajax的操作本身是操作一个XMLHttpRequest对象,所有的请求发送和监听都是围绕它进行的.

    在不同浏览器中,以及IE的不同浏览器版本下都会有不一样的Function创建这个对象,或者方法不同或者参数不同.

01 function CreateXHR() {
02             var xhrobj = false;
03             try {
04                 xhrobj = new ActiveXObject("Msxml2.XMLHTTP"); //ie msxml3.0+
05             }
06             catch (e) {
07                 try {
08                     xhrobj = new ActiveXObject("Microsoft.XMLHTTP"); //ie msxml 2.6
09                 catch (e2) {
10                     xhrobj = false;
11                 }
12             }
13             if (!xhrobj && typeof XMLHttpRequest != 'undefined') { //firefox opera 8.0 safari
14                 xhrobj = new XMLHttpRequest();
15             }
16             return xhrobj;
17         }

    为了最终创建出正确的XHR对象,不断用try-catch进行尝试.

    Second - 有了XHR对象,接下来我们调用XMLHttpRequest对象的各个方法就可以了,Ajax对于所谓的异步请求发送无外乎就是通过几个方法来进行的.

    我们这里是通过Javascript原生编写异步请求,但是其实并不复杂,只需要记住几个function就可以了.

01 //open,setRequestHeader,onreadystatechange,send
02  
03 var xhr = CreateXHR();
04  
05 //这里以POST方式发送,也可以是GET,参数不同即可.而且GET不需要设置setRequestHeader
06 xhr.open("POST""demo.jsp"true);
07  
08 //设置HTTP的输出内容类型为:application/x-www-form-urlencoded
09 xhr.setRequestHeader("Content-Type""application/x-www-form-urlencoded");
10  
11 //设置浏览器不使用缓存,服务器不从缓存中找,重新执行代码,而且服务器返回给浏览器的时候,告诉浏览器也不要保存缓存。
12 xhr.setRequestHeader("If-Modified-Since""0");
13   
14 //设置回调函数
15 xhr.onreadystatechange = callback;  //callback是方法名
16   
17 //发送请求
18 xhr.send(null); //GET方式
19 xhr.send("isAjax=1&na=123"); //POST方式

    这里就完成了请求发送,也定义了请求的回调是callback函数,所以最后我们的请求的结果就是在callback函数中.

    Third - 定义callback函数,Ajax的返回是有状态的,这里不同于jQuery的success,所以要自己判断状态码是否正确.

 
1 //回调函数
2 function callback() {
3   if (xhr.readyState == 4) {
4     if (xhr.status == 200) {
5       var res = xhr.reponseText; //获得服务器返回的字符串
6       console.log(res);
7     }
8   }
9 }

    这样就完成了通过原生Javascript发送Ajax请求.

转载地址:http://vfghl.baihongyu.com/

你可能感兴趣的文章
一个android版本的rss阅读器--明天补充实现过程,先上图
查看>>
WPF TreeView
查看>>
HTML: 仿写一个财经类静态的网页
查看>>
C#读写config配置文件
查看>>
JavaScript:文本域事件处理
查看>>
关于dctser进程
查看>>
一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM中的查询
查看>>
win7远程登录
查看>>
5.6. DHCP
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本模块管理界面新增模块排序功能...
查看>>
ajax与算法,sql的group处理
查看>>
《C#高级编程》笔记系列--点滴记录(持续更新中……)
查看>>
采用泳道图工具跟踪项目进度或者问题解决进度
查看>>
sql server 2008学习1–系统数据库
查看>>
找零钱的两种方法
查看>>
DM642图像处理程序的主要结构
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~三 分部类是否破坏了单一职责...
查看>>
redis的主从配置 扩容
查看>>
HDU1004 Let the Balloon Rise
查看>>
jquery 校验中国身份证号码
查看>>