Ajax

  术语Ajax描述了一种主要使用脚本操纵HTTP的Web应用架构,浏览器再XMLHttpRequest类上定义了它们的HTTP API,这个类的每个实例都表示一个独立的请求/响应对

一个HTTP请求由4部分组成:

  • HTTP请求方法或“动作”(verb)
  • 正在请求的URL
  • 一个可选的请求头集合,其中可能包含身份验证信息
  • 一个可选的请求主体

服务器返回的HTTP响应包含3部分:

  • 一个数字和文字组成的状态码,用来显示请求的成功和失败
  • 一个响应头集合
  • 响应主体

1.指定请求

var request = new XMLHttpRequest();
request.open("GET","index.php");
如果有请求头的话,请求进程的下个步骤是设置它。例如,POST请求需要"Content-Type"头指定请求主题的MIME类型:
request.setRequestHeader("Content-Type","text/plain");
request.send(null);

2.取得响应

  为了在响应准备就绪时得到通知,必须监听XMLHttpRequest对象上的readystatechange事件,但之前必须理解readyState属性,readyState是一个整数,它制定了HTTP请求的状态,下面是值对应的含义

0 -> open()尚未调用
1 -> open()已经调用
2 -> 接收到头信息
3 -> 接收到响应体
4 -> 响应完成

  理论上,每次readyState属性的改变都会触发这个readystatechange事件。当readyState值改变为4或服务器响应完成时,所有浏览器都触发readystatechange事件,为了监听readystatechange事件,需把事件处理函数设置为XMLHttpRequest对象的onreadystatechange属性。

获取HTTP响应的onreadystatechange示例

var request = new XMLHttpRequest();       //创建新请求
request.open('GET','index.php');          //指定待获取的URL
request.onreadystatechange = function(){ //定义事件处理程序
  //如果请求完成,则它是成功的
  if(request.readyState === 4 & request.status === 200){
    var type = request.getResponseHeader("Content-Type")
    if(type.match(/^text/)){ //确保响应是文本
      callback(request.responseText); //把它传递给回调函数
    }
  }
};
request.send(null); //立即发送请求

 3.post请求示例

var Data = {
    "name1": "value1",
    "name2": "value2"
} Data = (function(Obj){ // 转成post需要的字符串形式 var str = ""; for(var attr in Obj){ str += attr + "=" + Obj[attr] + "&" } return str; //此时的str格式为 "name1=value1&name2=value2&" })(Data); var request = new XMLHttpRequest(); //创建XHR对象实例 request.open("POST", "请求接口地址", true); request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //设置请求头信息 request.onreadystatechange = function(){ var XMLHttpReq = request; if (XMLHttpReq.readyState == 4) { if (XMLHttpReq.status == 200) { var text = XMLHttpReq.responseText; //获取响应的文本
       var json = eval('('+text+')') //json字符串转json对象 console.log(text); //控制台打印数据
       console.log(json); //控制台打印数据 } } }; xhr.send(Data); //发送数据

 

posted @ 2017-03-28 22:16  蔡春保  阅读(192)  评论(0编辑  收藏  举报