2026世界杯_2004年世界杯 - 1606811.com

首页 > 王者荣耀世界杯 > Ajax是什么,Ajax的用法(附带实例)

Ajax是什么,Ajax的用法(附带实例)

Ajax(Asynchronous JavaScript And XML,异步 JavaScript和XML)是在客户端(如浏览器)与服务器进行后台数据交换的一种编程方法。

那么,Ajax 有什么实际用途呢?从用户的角度看,如果每次从服务器获取新的数据都刷新整个页面,页面总是会“闪一下”,而且会传输大量的重复数据。那么,使用 Ajax 的作用就是,客户端不需要刷新整个页面,而是通过 Ajax 与服务器进行交流,只获取页面中需要更新的一小部分内容。

这么做,一方面可以减少服务器负载和网络传输数据量,另一方面也可以实现更加友好、更加丰富的交互体验。

请注意,这里并没有什么新技术,只是 JavaScript 代码和 XMLHttpRequest 对象的综合应用,而且,读者也不需要被 XML 所迷惑,使用 Ajax 可以从服务器接收多种格式的数据,而 XML 只是其中一种。

下面先了解一下 Ajax 的主角——XMLHttpRequest 对象的应用。

XMLHttpRequest对象

现代浏览器对 XMLHttpRequest 对象的支持已经非常全面了,所以,在代码中可以很方便地创建 XMLHttpRequest 对象,如下面的代码:

var xhr = new XMLHttpRequest();

下表是 XMLHttpRequest 对象的一些常用属性:

属性

描述

onreadystatechange

指定服务器返回状态改变时的响应函数。

readyState

表示服务器返回的状态值,4 表示成功完成。请注意,服务器返回状态 4 并不表示正确获取资源,还需要 status 属性确认。

status

返回获取资源的状态码。200 表示从服务器成功获取,304 表示资源没有变化,可以缓存中获取资源,这两种状态时都有可用的资源。

statusText

返回获取资源状态的文本描述,如 200 状态码对应的描述文本就是“OK”。

responseText

从服务器返回的文本内容。

responseXML

从服务器返回的 XML 数据。

XMLHttpRequest 对象中常用的方法如下表所示:

方法

描述

abort()

取消向服务器请求的操作。

getAllResponseHeaders()

获取服务器返回的所有首部信息。

getResponseHeader()

获取服务器返回的指定首部信息。

open()

设置请求信息。

send()

向服务器独立发送请求。

setRequestHeader()

设置请求时的首部信息。

下面以一个请求文本内容的操作为例。首先,在服务器创建一个文本文件(/demo/msg.txt),修改文件内容如下:

您好!这是来自Web服务器的消息。

下面的代码使用 Ajax 读取 /demo/msg.txt 文件:

首先看一下执行效果,如下图所示:

创建 XMLHttpRequest 对象后,首先,设置 onreadystatechange 属性值,定义为一个函数,结构如下:

xhr.onreadystatechange = function () {

// 对服务器状态的响应

};

其次,通过 open() 方法设置请求(request)信息,参数包括:

参数一,指定数据的发送方式,包括 GET 和 POST;

参数二,指定资源的 URL,当有 GET 方式发送的数据时,需要拼接到地址中,如“article.php?id=123”;

参数三,指定是否异步操作,一般都会设置为 true,即异步操作,避免页面停止响应;

参数四和参数五,当获取的资源需要凭证时,分别使用这两个参数设置用户和密码。一般的资源可以不使用这两个参数。

send() 方法会向服务器发起请求,如果数据发送方式设置为 POST,需要在 send() 方法的参数中设置发送的数据;数据发送方式为 GET 或没有需要发送的数据时,send() 方法的参数就设置为 null。

向服务器发送请求后,就可以通过 onreadystatechange 属性设置的函数响应服务器返回的状态和数据,如下面的代码:

if (xhr.readyState === 4) {

if (xhr.status === 200 || xhr.status === 304) {

var e = document.getElementById("msg");

e.innerText = xhr.responseText;

xhr = null;

}

}

从服务器获取资源时,首先需要 readyState 属性返回 4,即服务器正确地进行了响应;其次,status 属性值为 200 或 304 时都有可用的资源。

如果只需要从服务器获取最新的资源,只响应 status 属性值为 200 时的状态。这里有一个小技巧,向服务器发起请求时,可以添加一个动态的参数避免使用缓存的资源。

如下面的代码动态添加了一个时间戳参数:

var url = "article.php?id=123&ts=" + new Date().getTime();

以上就是通过 Ajax 从服务器获取文本的完整操作过程。

接下来再看一下从服务器获取 XML 数据的示例。首先,还是在服务器中创建一个 XML 文件,内容如下:

1

Tom

2

Jerry

3

John

代码的第一行声明了文件类型是 XML,字符集为 utf-8,接下来的内容才是 XML 数据内容。其中,根节点为 records,然后,每一个 record 节点都包含了两个子节点,即 userid 和 username 节点,这两个节点的子节点就是具体的数据,在 XML 中称为文本节点。

下面的代码在页面中通过 Ajax 获取 XML 数据:

代码执行结果如下图所示:

实际应用中,使用 Ajax 获取数据主要包括四种情况,即使用 POST 或 GET 方式传递参数,分别获取文本内容或 XML 数据。下面针对这四种情况进行代码封装。

Ajax操作封装

下面的代码在 /lib/js/ajax.js 文件中创建 ajaxGetText() 函数,其功能是通过 GET 方式传递参数,并获取文本内容。

// 使用 GET 方式传递参数,获取文本内容

function ajaxGetText(url, param, fn) {

var xhr = new XMLHttpRequest();

if (xhr === null) return;

xhr.onreadystatechange = function () {

if (xhr.readyState === 4) {

if (xhr.status === 200 || xhr.status === 304) {

fn(xhr.responseText);

xhr = null;

}

}

};

xhr.open("GET", url + "?" + param, true);

xhr.send(null);

}

其中,ajaxGetText() 函数有三个参数,分别是:

url:获取资源的主 URL。

param:获取资源所需要的参数,它们会通过问号(?)连接在 url 后面。

fn 为一个函数类型,它应包含一个参数,用于带入服务器返回的文本内容。

使用 ajaxGetText() 函数的基本格式如下:

ajaxGetText(url, param, function(txt) {

// 处理服务器返回的 txt 格式的内容

});

下面的代码测试了 ajaxGetText() 函数的应用:

代码执行结果如下图所示:

下面的代码(/lib/js/ajax.js)继续创建 ajaxPostText() 函数,它的功能是通过 POST 方式向服务器传递数据,并返回文本内容:

// 使用 POST 方式传递参数,获取文本内容

function ajaxPostText(url, param, fn) {

var xhr = new XMLHttpRequest();

if (xhr === null) return;

xhr.onreadystatechange = function () {

if (xhr.readyState === 4) {

if (xhr.status === 200 || xhr.status === 304) {

fn(xhr.responseText);

xhr = null;

}

}

};

xhr.open("POST", url, true);

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");

xhr.send(param);

}

接下来分别通过 GET 和 POST 方式向服务器传递参数,并返回 XML 数据的函数,如下面的代码(/lib/js/ajax.js):

// 使用 GET 方法传递参数,获取 XML 数据

function ajaxGetXml(url, param, fn) {

var xhr = new XMLHttpRequest();

if (xhr === null) return;

xhr.onreadystatechange = function () {

if (xhr.readyState === 4) {

if (xhr.status === 200 || xhr.status === 304) {

fn(xhr.responseXML);

xhr = null;

}

}

};

xhr.open("GET", url + "?" + param, true);

xhr.send(null);

}

// 使用 POST 方法传递参数,获取 XML 数据

function ajaxPostXml(url, param, fn) {

var xhr = XMLHttpRequest();

if (xhr === null) return;

xhr.onreadystatechange = function () {

if (xhr.readyState === 4) {

if (xhr.status === 200 || xhr.status === 304) {

fn(xhr.responseXML);

xhr = null;

}

}

};

xhr.open("POST", url, true);

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");

xhr.send(param);

}




《绝地求生全军出击》ios新春版怎么更新
卡塔尔世界杯激战正酣,中国古人“玩球”也疯狂!