JavaScript基础知识总结——ajax基础

2017-08-23  本文已影响0人  More_5897

Ajax

XMLHttpRequest 对象

Ajax主要通过使用XMLHttpRequest对象来实现异步数据交互和通信
1.非IE浏览器和高版本的IE浏览器

var xhr = new XMLHttpRequest();

2.老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象

var xhr = new ActiveXObject("Microsoft.XMLHTTP");

3.兼容处理

//Ajax.js    
function createAjax() {
  var xhr ;
  if(window.XMLHttpRequest){
    //所有现代浏览器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象。
    xhr = new XMLHttpRequest();
  }else {
    //老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
  }

  return xhr;
}
方法名 注释
abort 取消当前请求
getAllResponseHeaders 获取响应的所有http头
open(方式get/post,url地址,同步异步 创建一个新的http请求,打开请求,并指定此请求的方法、URL以及验证信息(用户名/密码)
send() 发送请求到http服务器并接收回应
setRequestHeader 单独指定请求的某个http头,header()设置http头协议信息

2.属性:

方法名 注释
onreadystatechange 指定当readyState属性改变时的事件处理句柄。
readyState 返回当前请求的状态,ajax行进过程中不同状态
responseBody 将回应信息正文以unsigned byte数组形式返回
responseStream 以Ado Stream对象的形式返回响应信息。
responseText 将响应信息作为字符串返回.只读
responseXML 将响应信息格式化为Xml Document对象并返回,只读
status 返回当前请求的http状态码. 200 ok 304 缓存 ; 404 not found; 403 没有权限 501 服务器级别错误
statusText 返回当前请求的响应行状态文本, ok not found forbidden

3.基本使用:

//>>1.创建Ajax引擎对象
var xmlHttpRequest= createAjax();
//>>2.设置发送请求时需要具备的数据
  //>>2.1.指定请求url地址(注意还没有发出请求仅仅是设置请求地址和请求方式)
  xmlHttpRequest.open('GET/POST','url地址',[ '是否异步']);
  //>>2.2.监听Ajax引擎对象的改变
  xmlHttpRequest.onreadystatechange=function(){
      //当请求和响应同时完成,从Ajax引擎中获取响应内容,然后通过javascript对网页进行操作
      if (xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200){
          //根据相应内容对网页进行操作的代码通常写在这里
          // xmlHttpRequest. responseText
//          //xmlHttpRequest. responseXML
      }
  }
//>>3.发送请求
xmlHttpRequest.send([post请求参数字符串])
xhr.setRequestHeader("MyHeader", "MyValue");

var myHeader = xhr.getResponseHeader("MyHeader");
var allHeaders = xhr.getAllResponseHeaders();
var xhr = new XMLHttpRequest();
function addURLParam(url, name, value) {
    url += (url.indexOf("?") == -1 ? "?" : "&");
    url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
    return url;
}
var url = "example.php";
url = addURLParam(url, "name", "Nicholas");
url = addURLParam(url, "book", "Professional JavaScript");

xhr.open("get", url, true);
xhr.send(null);
var xhr = new XMLHttpRequest();
xhr.open("post", "postexample.php", true);
//模仿表单提交
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var form = document.getElementById("user-info");
xhr.send(serialize(form));
<?php
  header("Content-type: text/plain");
  echo <<<EOF
Name:{$_POST['user-name'};
Emial:{$_POST('user-email')};
EOF;

GET请求消耗的资源少,同等数据量是POST的两倍。

XMLHttpRequest 二级

//键值对形式
var data = new FormData();
data.append("name", "Nicholas");
//使用表单初始化FormData
var data = new FormData(document.forms[0]);
xhr.send(data);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if (xhr.readyState == 4){
        try {
            if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
                alert(xhr.responseText);
            } else {
                alert("Request was unsuccessful: " + xhr.status);
            }
        } catch (ex){

        }
    }
};
xhr.open("get", "timeout.php", true);
xhr.timeout = 1000; //      IE8+
xhr.ontimeout = function(){
    alert("Request did not return in a second.");
};
xhr.send(null);
var xhr = createXHR(); xhr.open("get", "text.php", true); xhr.overrideMimeType("text/xml"); xhr.send(null);
上一篇下一篇

猜你喜欢

热点阅读