代码改变世界

AJax细节详解

2011-09-20 06:44  刘永强  阅读(197)  评论(0)    收藏  举报

 

AJax细节详解
 
一:什么是Ajax?
   Ajax全称市“Asynchronous JavaScript and XML”,中文意思是异步JavaScrip和XML,是指一种创建交互式网页应用的开发技术,AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词。
二:Ajax的优点
    Ajax在本质上是一个浏览器端的技术,主要目的在于局部客户端及服务器间的数据交换,这个技术的主角是XMLHttpRequset,在于不用重新载入整个页面来更新数据,也就是所谓的Refresh without Reload(轻刷新),通过JavaScript与服务器沟通,使用XMLRequest本身传送数据量很小,所以反应会更快,也就是让网络程式更像一个桌面程序,Ajax就是运用javascript在后台帮我们跟服务器要数据,最后由javascript或者dom来帮你呈现结果。
三:创建XMLHttpRequest对象(注意浏览器兼容问题?????)
   function createXmlHttp() {//创建xhr对象
            var xhobj = false;
            try {
                xhobj = new ActiveXObject("Msxml2.XMLHTTP"); // ie msxml3.0+
            } catch (e) {
                try {
                    xhobj = new ActiveXObject("Microsoft.XMLHTTP"); //ie msxml2.6
                } catch (e2) {
                    xhobj = false;
                }
            }
            if (!xhobj && typeof XMLHttpRequest != 'undefined') {// Firefox, Opera 8.0+, Safari
                xhobj = new XMLHttpRequest();
            }
            return xhobj;
        }
 
四:XMLHttpRequest对象的方法
   方法                     说明
   abort             取消请求
   open                     需要使用多个参数,第一个设置方法属性,第二个设置目标URL,第三个指定是同步(false)还是异步(true)发送请求
   send                     发送请求到服务器
   setRequestHeader     添加自定义HTTP头到请求
   getAllResponseHeaders     获取HTTP响应头的整个列表
   getResponseHeader    仅获取指定的HTTP响应头
五:Ajax两种请求方式:
    get方式:var xhr=new XMLHttpRequest();xhr.setRequestHeader("If-Modified-Since","0");作用是设置浏览器不使用缓存
    post方式:xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");只有写了这句代码才能接收到post传送的数据
六:XMLHttpRequest对象常用属性
    onreadystatechange------返回或设置异步请求的事件处理程序
    readyState--------------返回状态码:0:没有初始化;1打开;2发送;3:正在接收;4:已加载
    responseText------------使用字符串返回Http响应
    responseXML-------------使用xml dom对象返回Http响应
    status------------------返回http状态码
七:注意点:
    (1)xhr.send();send方法里传递的参数为键值对;
    (2)将泛型集合,转成javascript的 json数组字符串
       1.创建 js序列化器对象
       System.Web.Script.Serialization.JavaScriptSerializer jsS = new    System.Web.Script.Serialization.JavaScriptSerializer();
       2调用序列化方法,将 泛型集合对象list转成json数组字符串
       string jsonArrStr = jsS.Serialize(list);
 
    (3)获得请求报文里的参数t,可能是get也可能是post过来,用params均可获取到
         string type = context.Request.Params["t"];
 
    (4)var listJsonArr = eval(res); eval函数的作用是:把一个形式类似于数组的字符串转换成数组
 
    (5)当在js中利用表单以post的形式提交表单数据时,需要设置请求报文头,否则服务器不认识发送到服务器的数据。
       xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");