zoukankan      html  css  js  c++  java
  • Ajax机制简介【转】

    Ajax作为一种常用的web技术,本质是通过XMLHttpRequest对象请求远程接口获取数据,本文简单介绍其实现机制。

    Ajax基础

    一个完整的Ajax过程如下:

    1. 创建XMLHttpRequest对象
    2. 通过上一步创建的XMLHttpRequest对象,打开一个连接
    3. 绑定事件,对获取到的数据进行处理。一般为请求成功后的回调函数
    4. 发送该请求

    根据上面的步骤进行简单的描述:

    1. 对于不同的浏览器,创建一个能发起Ajax请求对象的方式不一样。 现代浏览器通过内嵌的XMLHttpRequest()对象即可实现,而老的浏览器(IE6/IE6-)则需要通过一个ActiveX对象来创建。

    2. 打开一个到远程对象的请求,需要通过XHR的open()方法实现。语法:

    open(method, url, async, user, password)

    其中:

    • method可以取值为GET、POST、HEAD、PUT、DELETE、OPTIONS,前二者是常用的。
    • url为请求的远程接口
    • async为布尔值,是否需要异步处理请求,默认为true
    • 如果此接口需要用户名和密码,可附上,不过这样就暴露了

    3. 通过监控readystatechange事件,判断数据是否请求完成,并进行相关处理。其状态值可以通过readyState获取,有如下5种状态:

    • 0: XHR对象未初始化
    • 1: XHR对象已经建立,但还未发送
    • 2: 已调用send(),请求已发送
    • 3: 已接收到数据,正在处理中
    • 4: 数据接收并处理完成,可以使用了

    4. send()方法用于发送请求,若是POST方式,可以将需要传送的数据作为参数发送,形如send(data),但此时需要先设置XMLHttpRequest请求头的Content-Type为application/x-www-form-urlencoded。

    一个简单的Ajax示例:

    var XMLHttpFactories = [
    	function () {return new XMLHttpRequest()},
    	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
    	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
    	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
    ];
    
    function createXMLHTTPObject() {
    	var xmlhttp = false;
    	for (var i=0;i<XMLHttpFactories.length;i++) {
    		try {
    			xmlhttp = XMLHttpFactories[i]();
    		} catch (e) {
    			continue;
    		}
    		break;
    	}
    	return xmlhttp;
    }
    
    // 步骤1:建立XMLHttpRequest对象
    var xhr = createXMLHTTPObject();
    // 步骤2:打开一个连接
    xhr.open('GET', 'http://localhost/phpinfo.php');
    // 步骤3:绑定对返回数据的回调函数
    xhr.onreadystatechange = function() {
    	console.log(xhr.readyState +':'+ xhr.status);
    }
    // 步骤4:发送请求
    xhr.send();
    

    Ajax进阶

    1. setRequestHeader(name, value) setRequestHeader()用来设置HTTP请求头,如在POST时,需要设置xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);

    2. getResponseHeader(name) 此处可获得返回的HTTP头中的指定信息。

    3. getAllResponseHeaders() 此方法获得返回的HTTP头。

  • 相关阅读:
    [JZOJ3339]【NOI2013模拟】wyl8899和法法塔的游戏
    [JZOJ3337] 【NOI2013模拟】wyl8899的TLE
    UVA 1262 Password
    UVA 10820 Send a Table
    UVA 12716 GCD XOR
    UVA 10791
    UVA 10375 choose and divide (唯一分解定理)
    欧拉函数
    51 Nod 1069 Nim游戏
    51 Nod 1242 矩阵快速幂求斐波那契数列
  • 原文地址:https://www.cnblogs.com/lovebear/p/2521016.html
Copyright © 2011-2022 走看看