原生的 XMLHttpRequest

创建XMLHttpReuqest

由于在IE7之前,IE不支持XMLHttpRequest,所以如果想要兼容IE7之前的版本,就需要做一些额外的工作来创建XMLHttpRequest对象。可以使用下面的代码来创建:

function createXHR(){
            //如果支持XMLHttpRequest,之间创建该对象
            if (typeof XMLHttpRequest != "undefined"){
                return new XMLHttpRequest();
            } //否则就要判断要用哪个对象来创建了
            else if (typeof ActiveXObject != "undefined"){
                if (typeof arguments.callee.activeXString != "string"){
                    var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0",
                                    "MSXML2.XMLHttp"],
                    var i, len;
                    //逐个试,一旦找到合适的,就去创建
                    for (i=0,len=versions.length; i < len; i++){
                        try {
                            new ActiveXObject(versions[i]);
                            arguments.callee.activeXString = versions[i];
                            break;
                        } catch (ex){
                            //skip
                        }
                    }
                }
            
                return new ActiveXObject(arguments.callee.activeXString);
            } else {//创建不成功
                throw new Error("No XHR object available.");
            }
        }

执行Ajax请求:

 1  var xhr = createXHR();
 2         //需要调用的第一个方法就是open()
 3         //第一个参数表示请求的方式get或post,第二个表示请求的资源,true表示异步
 4         xhr.open("get","../ajax/AjaxDataDemo",true);
 5         //自定义头部,推荐使用自定义的头部
 6         xhr.setRequestHeader("myheader","myheader");
 7         xhr.send(null);
 8         
 9         //请求完成后的回调函数,可能会调用很多次
10         xhr.onreadystatechange = function() {
11             //readyState表示请求的状态,为3时就会调用onreadystatechange
12             //等于4时表示数据完成
13              if(xhr.readyState == 4) {
14                  //status表示http响应码,statusText是对应的说明
15                  alert(xhr.status + ": " + xhr.statusText);
16                  //返回的数据都放在responseText中
17                  alert("data: " + xhr.responseText);
18                  var allheaders = xhr.getAllResponseHeaders();
19                  alert(allheaders);
20              }
21         }
22         
23         alert("ajax is async,so it's my time.");

XMLHttpRequest 对象的重要属性:

(1)readyState存有XMLHttpRequest 的状态,0~4。

         0——请求未初始化

         1——服务器连接已经建立

         2——请求已接受

         3——请求处理中

         4——请求已完成,且响应已就绪。

(2)status,HTTP的特定状态码:

100-199:信息性的标示用户应该采取的其他动作。

200-299:表示请求成功。

300-399:用于那些已经移走的文件,常常包括Location报头,指出新的地址。

400-499:表明客户引发的错误。

500-599:由服务器引发的错误。

(3)onreadystatechage:

 存储函数(或函数名),每当readyState属性改变时,就会调用该函数

XMLHttpRequest 对象的常用方法:

open(method,url,async)

规定请求的类型,URL以及是否异步处理请求

1.method:请求的类型:GET或POST

2.url:文件在服务器上的位置

3.async:true(异步)或false(同步)

send(string)

将请求发送到服务器。

string:仅用于POST请求,表示传递的参数,格式为key1=val1&key2=val2

的查询字符串

setRequestHeader(header,value)

向请求添加HTTP头.

header:规定头的名称

value:规定头的值

posted @ 2018-08-12 19:19  灬King  阅读(177)  评论(0编辑  收藏  举报