如果不用jQuery,Ajax你还能写出多少?
2014-03-19 14:26
316 查看
许久之前发过一篇关于Ajax的博客,通篇讲的都是通过jQuery编写Ajax,可能因为jQuery在这方面做的实在太好,以至于突然发现不用jQuery的话自己都模糊了Ajax的写法,这里重温一下.
First-我们明确在使用jQuery的Ajax忽略掉的问题,那就是Ajax的操作本身是操作一个XMLHttpRequest对象,所有的请求发送和监听都是围绕它进行的.
在不同浏览器中,以及IE的不同浏览器版本下都会有不一样的Function创建这个对象,或者方法不同或者参数不同.
为了最终创建出正确的XHR对象,不断用try-catch进行尝试.
Second-有了XHR对象,接下来我们调用XMLHttpRequest对象的各个方法就可以了,Ajax对于所谓的异步请求发送无外乎就是通过几个方法来进行的.
我们这里是通过Javascript原生编写异步请求,但是其实并不复杂,只需要记住几个function就可以了.
这里就完成了请求发送,也定义了请求的回调是callback函数,所以最后我们的请求的结果就是在callback函数中.
Third-定义callback函数,Ajax的返回是有状态的,这里不同于jQuery的success,所以要自己判断状态码是否正确.
viewsource
print?
这样就完成了通过原生Javascript发送Ajax请求.
First-我们明确在使用jQuery的Ajax忽略掉的问题,那就是Ajax的操作本身是操作一个XMLHttpRequest对象,所有的请求发送和监听都是围绕它进行的.
在不同浏览器中,以及IE的不同浏览器版本下都会有不一样的Function创建这个对象,或者方法不同或者参数不同.
01 | function CreateXHR(){ |
02 | var xhrobj= false ; |
03 | try { |
04 | xhrobj= new ActiveXObject( "Msxml2.XMLHTTP" ); //iemsxml3.0+ |
05 | } |
06 | catch (e){ |
07 | try { |
08 | xhrobj= new ActiveXObject( "Microsoft.XMLHTTP" ); //iemsxml2.6 |
09 | } catch (e2){ |
10 | xhrobj= false ; |
11 | } |
12 | } |
13 | if (!xhrobj&& typeof XMLHttpRequest!= 'undefined' ){ //firefoxopera8.0safari |
14 | xhrobj= new XMLHttpRequest(); |
15 | } |
16 | return xhrobj; |
17 | } |
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方式 |
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 | } |
相关文章推荐
- 简单的ajax连接库分享(不用jquery的ajax)
- 不用JQuery,原生Javascript实现Ajax功能及相关知识点
- 利用AJAX,得到XML和JSON信息,不用JQuery等UI框架,兼容 IE、Firefox、Chrome、Safari、Opera 等浏览器。
- JQuery实现“还能输入多少个字”
- 不用JQuery,原生Javascript实现Ajax功能及相关知识点
- zookeeper集群如果有七台,那么挂掉多少台还能正常工作?
- 不用jquery等框架实现ajax无刷新登录
- 简单的ajax连接库分享(不用jquery的ajax)
- 不用JQuery,原生Javascript实现Ajax功能及相关知识点
- 如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢? 这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
- jQuery扩展实现text提示还能输入多少字节的方法
- 0.jquery 验证,以及显示出现错误的地方 1.当用jquery.validate与ajax时候特别小心在每句后面的逗号问题,如果不需要的地方加上逗号会造成页面无法进入js验证
- 不用jquery等框架/库,查找一个页面上有多少种标签,并计算每种标签的个数
- 不断的跨域访问的时候,如果jquery,ajax都没办法解决的时候,用下面这个吧:
- jQuery中ajax-$.getJSON,$.getScript
- Jquery Ajax for ASP.NET
- jQuery-瀑布流-浮动布局(一)(延迟AJAX加载图片)
- JQuery的Ajax跨域请求的解决方案
- 使用Jquery的ajax方式实现对表格的删除和修改
- jQuery AutoComplete在AJAX UpdatePanel环境中PostBack之后无法工作