AJax技术

Ajax技术由简至深

字号+ 作者:H5之家 来源:H5之家 2017-03-11 18:01 我要评论( )

第一次写,嘿嘿写Ajax的初衷,是一个朋友突然问题我Ajax的问题。想想好久没用了,也忘了很多,感觉很糟糕。所以想通过写的方式,加深学习。有点没事找事干的感觉

第一次写,嘿嘿

写Ajax的初衷,是一个朋友突然问题我Ajax的问题。想想好久没用了,也忘了很多,感觉很糟糕。所以想通过写的方式,加深学习。有点没事找事干的感觉,嘿嘿

言归正传,

Ajax是啥?简而言之,如其名Asynchronous javaScript And Xml(异步的javaScript与Xml)

作用(用户方面):提高用户体验,来一次更流畅的操作之旅

        (技术方面):减少带宽压力,提高前后台交互的能力

实现:Ajax技术是通过浏览器一个内置对象XMLHttpRequest,向服务器端发送异步的请求,该请求不会影响用户其他操作,‘偷偷摸摸’的实现了前后台的交互。

         具体实现如图:


简单流畅:一个操作------触发事件----调用Ajax代码,向服务器发送请求-----服务端处理请求,数据库交互----响应(将处理结果,发送给前台)---Ajax接受响应,处理响应---实现异步(最常见的效果就是更新部分节目效果时,不刷新界面) 完美,嘿嘿。

简单介绍,就上述了。下面我们来看看复杂点的东西。

1,XmlHttpRequest针对 IE浏览器与其它浏览获取方式不同

我们常见写法

    function getXhr(){

      var xhr=null;

      if(Window.XMLHttpRequest){----针对非IE浏览

         xhr=new  XMLHttpRequest();

}else{

        xhr=new ActiveObject('Microsoft.XMLHttp');---IE浏览器

}

}-----究其原因,就是BOM没有统一的规范。

XmlHttpRequest的属性

1,onreadystatechange:绑定事件(什么时候调用Ajax代码)

2,reponestText:获得响应文本数据(服务端传给前端的数据)

3,reponestXML:获得相应XML文档

4,status:获得状态码

5,readyState:返回一个告知Ajax与服务器通信的状态值(NUMBER类型)

                         0:对象已创建未初始化/1:对象已建立也初始化,但是为调用send方法/2:调用send方法中/3:数据在传的过程中/4:已获得所有数据

一个完整Ajax实现案例:

第一步:var xhr=getXhr();----创建Ajax对象 

第二步:xhr.open('get',xxxxx.do?username=abc&age=23,true);

               xhr.open('post',xxxxx.do,true);

               xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')----post请求必须发一个该消息头。默认情况不发,加这行就会发。

---第一个参数,请求方式;第二参数,指定url路径以及向服务端传的数据;第三个参数,boolean值默认为true,表示异步;

第三步:xhr.onreadystatechange=func1();---绑定一个函数

第四步:xhr.send(null);-----发送请求,参数:向服务端传的数据,如果路径中已带,直接null即可;post方式,必须将数据写在send方法中;

第五步:function f1(){

    if(xhr.readyState==4){

       var text=xhr.reponestText;

      DOM操作....其实就是写js

}

}

2,编码问题

相信做web项目,大家一定都会碰到编码问题,Ajax技术也一样,由于浏览器不同支持以及服务端的规范,所以有时存在乱码的问题。

根据不同请求方式也有差异:

get请求

主要指IE与其他浏览器的差异

IE提供的默认为:GBK或GB2312,对中文编码;

其他提供的默认:udf-8;

服务端默认:ISO-8859-1;

这样编码与解密不一致,come,乱码出现。

解决方法:


post请求:

主流浏览器的默认:udf-8;

服务端默认:ISO-8859-1;

解决方式:


3,缓存问题

get请求

IE浏览器检查URL路径是否存在(是否发过),如果已发过,IE浏览器不会去访问服务器,直接返回历史的(也就是指缓存中的)。这肯定不是我们想要的。

解决方式:

 1,url路径加个随机数  :xhr.open('get',xxxxx.do?username=abc&age=23&Moth.random(),true);  这样就保证每次的路径是不一样的

 2,将请求改为post请求即可

post请求

 暂无缓存问题

Ajax就这样多了。强调一下:DOM模型是Ajax最本质的技术,完完全全的客户端技术。

想了解Ajax与Json联系,请看Json介绍。




                                                                           




 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jQuery EasyUI API 中文文档 DateTimeBox日期时间框

    jQuery EasyUI API 中文文档 DateTimeBox日期时间框

    2017-03-12 10:02

  • Ajax学习(2)

    Ajax学习(2)

    2017-03-11 15:02

  • WordPress首页Ajax翻页

    WordPress首页Ajax翻页

    2017-03-11 14:05

  • ASP.NET AJAX学习记要(1)-如何下手

    ASP.NET AJAX学习记要(1)-如何下手

    2017-03-11 12:03

网友点评
e