认识Ajax

Ajax是动态JavaScript和XML技术的简称。主要作用是异步请求

1.异步请求过程

(1)Ajax对象创建

        var request;
        if(window.XMLHttpRequest){
            request = new XMLHttpRequest(); //IE7+,Firefox,Chrome,Opera,Safari...
        } else {
            request = new ActiveObject("Microsoft.XMLHTTP"); //IE6,IE5
        }

下面不考虑那么老旧的兼容性了。

(2)发起请求

        //GET请求
        request.open("GET","get.php",true);
        request.send();
        //POST请求 
        request.open("POST","post.php",true);
        request.setRequestHeader("Content-Type","application/x-wwww-form-urlencoded"); //告诉服务器要发送表单,设置Conten-type
        request.send("name=xiaohua&age=3");

GET请求一般用于信息获取,url上传递参数,不够安全,信息限制在2000字节。

POST请求一般用于修改服务器资源,发送大小无限制,内容在send()方法中发送。JavaScript中需要设置请求头的Content-Type。

(3)状态监听

        request.onreadystatechange = function(){
            if(request.readyState===4 && request.status===200){
                //做些事 request.responseText
            }
        }

这个事件用来监听request.readystate的:

                    0:请求未初始化,open还没调用
                    1:服务器连接已建立,open已经调用
                    2:请求已接收,接收到头信息了
                    3:请求处理中,接收响应主体了
                    4:请求已完成,且响应已就绪,响应完成了

request.status代表HTTP响应状态码。

响应信息一般用到request.responseText。request.responseXML是XML形式的不常用。

 

2.超时

 

xhr = new XMLHttpRequest();

xhr.abort(); //取消请求

xhr.timeout = 1000;  //设置超时,如果超过1s将自动取消请求

 

3.事件

  • onloadstart
  • onload
  • onloadend
  • onprogress
  • onerror
  • onabort
  • ontimeout
  • onreadystatechange

 

jQuery中的Ajax

相比js就简洁的多:

$.ajax({                           
  url:'check.php',
  data: { num: value },
  dataType:"text",
  success: function (data) {
    // ...
  },
   error: function(jqXHR){
       // ...jqXHR.status
   }
});

$.ajax是jQuery中Ajax的底层方法,很多方法都间接调用了它,如:

$.getJSON('url',[data],function(data){   //异步获取JSON数据
  //data["name"]
})

$.getScript('url',[data],[callback])    //异步加载js

$.get('url',function(data){})  //用GET方式异步请求服务器端数据

$.post('url',{num:$("#id").val()},function(data){}) //用POST方式异步请求服务器端数据

 

其他相关的方法:

load('url',[data],[callback])   //异步加载资源

serialize() //序列化,把表单中有name属性的元素值变成标准url编码文本字符串

$.ajaxSetup([options]) //设置Ajax全局默认选项

$(selector).ajaxStart(callback) //Ajax请求发出前触发函数

$(selector).ajaxStop(callback) //Ajax请求发出前触发函数

 

posted @ 2016-03-19 11:08  海绵小猪  阅读(242)  评论(0编辑  收藏  举报