Ajax异步请求几步曲——可直接引入

引入函数ajax(method,url,postStr,dataType="json"){

  return new Promise((resolve,reject)=>{...}

)};

function ajax(method,url,postStr,dataType="json"){
  return new Promise((resolve,reject)=>{

method: 请求方式,string类型,常取值:get   post...

url:请求地址,string类型

postStr:当method取post时需要发送给服务端的数据字符串

dataType:响应消息头,默认json,告诉浏览器是什么格式以及什么类型

 

1.获取xhr

var xhr = function(){
  if(window.XMLHttpRequest){
    return new XMLHttpRequest();
  }else{
    return new ActiveXObject("Microsoft.XMLHttp")
  }
}

 

 2.创建请求

  xhr.open(method,url,true); 

 

 3.设置请求消息头

如果method取值为post,则需修改消息头

if(method=="post"){
      xhr.setRequestHeader(
        "Content-Type", "application/x-www-form-urlencoded");
    }

  

4.设置回调并发送

xhr.onreadystatechange = function(){
  if(xhr.readyState==4){
    if(xhr.status==200){
      if(url.indexof(".php")!=-1&&dataType.toLowerCase()=="json"){
        console.log(xhr.responseText);
        resolve(JSON.parse(xhr.responseText)); 
      }else{
        console.log(xhr.responseText);
        resolve(xhr.responseText);
      }
    }else{
        reject("ajax出错了"+xhr.status);
    }
  }
  xhr.send(postStr);
}

  完整代码如下,服务器PHP,用JSON解析,不同的可以相应改动一下。

 1 function ajax(method,url,postStr,dataType="json"){  //
 2   return new Promise((resolve,reject)=>{
 3     //1、获取 xhr
 4     var xhr = (function(){
 5       if(window.XMLHttpRequest){
 6         return new XMLHttpRequest();
 7       }else{
 8         return new ActiveXObject("Microsoft.XMLHttp");
 9       }
10     })();
11     //2、创建请求
12     xhr.open(method,url,true);
13     
14     //4、设置请求消息头
15     if(method=="post"){
16       xhr.setRequestHeader(
17         "Content-Type", "application/x-www-form-urlencoded");
18     }
19     //3、设置回调
20     xhr.onreadystatechange=function(){
21       if(xhr.readyState == 4)
22         if(xhr.status == 200){
23           if(url.indexOf(".php")!=-1
24             &&dataType.toLowerCase()=="json"){
25             console.log(xhr.responseText);
26             resolve(JSON.parse(xhr.responseText));
27           }else{
28             console.log(xhr.responseText);
29             resolve(xhr.responseText);
30           }
31         }else
32           reject("ajax出错啦!"+xhr.status);
33     }
34     //5、发送
35     xhr.send(postStr);
36   })
37 }

 

posted @ 2017-09-23 14:31  青山_1997  阅读(625)  评论(0编辑  收藏  举报