AJAX

AJAX允许开发者在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。本文详细介绍了AJAX的工作原理,包括XMLHttpRequest对象的使用,GET和POST请求的发送,以及处理服务器响应的方法。AJAX的关键在于其异步特性,使得用户体验更加流畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章の目录

AJAX 简介

什么是 AJAX?

AJAX 如何工作?

XMLHttpRequest 对象

XMLHttpRequest 对象

创建 XMLHttpRequest 对象

XMLHttpRequest 对象方法

XMLHttpRequest 对象属性

AJAX 请求

向服务器发送请求

GET 还是 POST?

GET 请求

POST 请求

url —— 服务器上的文件

跨域访问(Access Across Domains)

异步 —— true 还是 false?

异步请求

同步请求

AJAX 响应

onreadystatechange 属性

服务器响应属性

responseText 属性

responseXML 属性

服务器响应方法

getAllResponseHeaders() 方法

getResponseHeader() 方法


正文

AJAX 简介

AJAX 是开发者的梦想,因为能够:

  • 不刷新页面更新网页
  • 在页面加载后从服务器请求数据
  • 在页面加载后从服务器接收数据
  • 在后台向服务器发送数据

什么是 AJAX?

AJAX = Asynchronous JavaScript And XML(异步的 JavaScript 和 XML)。

AJAX 并非编程语言。

AJAX 仅仅组合了:

  • 浏览器内建的 XMLHttpRequest 对象(从 Web 服务器请求数据)
  • JavaScript 和 HTML DOM(显示或使用数据)

AJAX 是一个令人误导的名称。AJAX 应用程序可能使用 XML 来传输数据,但将数据作为纯文本或 JSON 文本传输也同样常见。

AJAX 允许通过与场景后面的 Web 服务器交换数据来异步更新网页。这意味着可以更新网页的部分,而不需要重新加载整个页面。

AJAX 如何工作?

  1. 网页中发生一个事件(页面加载、按钮点击)
  2. 由 JavaScript 创建 XMLHttpRequest 对象
  3. XMLHttpRequest 对象向 Web 服务器发送请求
  4. 服务器处理该请求
  5. 服务器将响应发送回网页
  6. 由 JavaScript 读取响应
  7. 由 JavaScript 执行正确的动作(比如更新页面)

XMLHttpRequest 对象

AJAX 的核心是 XMLHttpRequest 对象。

XMLHttpRequest 对象用于同服务器交换数据。

XMLHttpRequest 对象

所有现代浏览器都支持 XMLHttpRequest 对象。

XMLHttpRequest 对象用于同幕后服务器交换数据。这意味着可以更新网页的部分,而不需要重新加载整个页面。

创建 XMLHttpRequest 对象

所有现代浏览器(Chrome、Firefox、IE、Edge、Safari 以及 Opera)都有内置的 XMLHttpRequest 对象。

创建 XMLHttpRequest 对象的语法是:

variable = new XMLHttpRequest();

XMLHttpRequest 对象方法

new XMLHttpRequest() —— 创建新的 XMLHttpRequest 对象。

abort() —— 取消当前请求。

getAllResponseHeaders() —— 返回头部信息。

getResponseHeader() —— 返回特定的头部信息。

open(method, url, async, user, psw) —— 规定请求。

  • method:请求类型 GET 或 POST
  • url:文件位置
  • async:true(异步)或 false(同步)
  • user:可选的用户名称
  • psw:可选的密码

send() —— 将请求发送到服务器,用于 GET 请求。

send(string) —— 将请求发送到服务器,用于 POST 请求。

setRequestHeader() —— 向要发送的报头添加标签/值对。

XMLHttpRequest 对象属性

onload —— 定义接收到(加载)请求时要调用的函数。

onreadystatechange —— 定义当 readyState 属性发生变化时被调用的函数。

readyState —— 保存 XMLHttpRequest 的状态:

  • 0:请求未初始化
  • 1:服务器连接已建立
  • 2:请求已收到
  • 3:正在处理请求
  • 4:请求已完成且响应已就绪

responseText —— 以字符串形式返回响应数据。

responseXML —— 以 XML 数据返回响应数据。

status —— 返回请求的状态号:

  • 200:"OK"
  • 403:"Forbidden"
  • 404:"Not Found"

statusText —— 返回状态文本(比如"OK" 或 "Not Found")。

AJAX 请求

向服务器发送请求

如需向服务器发送请求,使用 XMLHttpRequest 对象的 open() 和 send() 方法:

xhttp.open(method, url, async);
xhttp.send();
/*
open(method, url, async) —— 规定请求的类型
    method:请求的类型:GET 还是 POST
    url:服务器(文件)位置
    async:true(异步)或 false(同步)

send() —— 向服务器发送请求(用于 GET)

send(string) —— 向服务器发送请求(用于 POST)
*/

GET 还是 POST?

GET 比 POST 更简单更快,可用于大多数情况下。

不过,请在以下情况始终使用 POST:

  • 缓存文件不是选项(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 无大小限制)
  • 发送用户输入(可包含未知字符),POST 比 GET 更强大更安全

GET 请求

一条简单的 GET 请求:

xhttp.open("GET", "demo_get.asp", true);
xhttp.send();

如果需要用 GET 方法来发送信息,请向 URL 添加这些信息:

xhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true);
xhttp.send();

POST 请求

一条简单的 POST 请求:

xhttp.open("POST", "demo_post.asp", "true");
xhttp.send();

如需像 HTML 表单那样 POST 数据,请通过 setRequestHeader() 添加一个 HTTP 头部。请在 send() 方法中规定需要发送的数据:

xhttp.open("POST", "ajax_text.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Bill&lname=Gates");

/*
setRequestHeader(header, value) —— 向请求添加 HTTP 头部
    header:规定头部名称
    value:规定头部值
*/

url —— 服务器上的文件

open() 方法的 url 参数,是服务器上文件的地址。

该文件可以是任何类型的文件,如 .txt 和 .xml,或服务器脚本文件,如 .asp 和 .php(它们可以在发送回响应之前在服务器执行操作)。

跨域访问(Access Across Domains)

出于安全原因,现代浏览器不允许跨域访问。

这意味着网页和它尝试加载的文件必须位于同一台服务器上。

异步 —— true 还是 false?

异步请求

如需异步发送请求,open() 方法的 async 参数必须设置为 true。

发送异步请求对 web 开发人员来说是一个巨大的进步。服务器上执行的许多任务都非常耗时。在 AJAX 之前,此操作可能会导致应用程序挂起或停止。

通过异步发送,JavaScript 不必等待服务器响应,而是可以:

  • 在等待服务器响应时执行其他脚本
  • 当响应就绪时处理响应
xhttp.onreadystatechange = function() {
    if(this.readyState == 4 && this.status == 200){
        document.getElementById("demo").innerHTML = this.responsoText;
    }
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();

/*
onreadystatechange 属性
    通过 XMLHttpRequest 对象,可以定义当请求接收到应答时所执行的函数。
    这个函数是在 XMLHttpRequest 对象的 onreadystatechange 属性中定义的。
*/

同步请求

如需执行同步的请求,请把 open() 方法中的第三个参数设置为 false。

有时 async = false 用于快速测试。你也会在更老的 JavaScript 代码中看到同步请求。

由于代码将等待服务器完成,所以不需要 onreadystatechange 函数。

xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;

我们不推荐同步的 XMLHttpRequest(async = false),因为 JavaScript 将停止执行直到服务器响应就绪。如果服务器繁忙或缓慢,应用程序将挂起或停止。

同步 XMLHttpRequest 正在从 Web 标准中移除,但是这个过程可能需要很多年。

现代开发工具被鼓励对使用同步请求作出警告,并且当这种情况发生时,可能会抛出 InvalidAccessError 异常。

AJAX 响应

onreadystatechange 属性

onreadystatechange 属性定义当 readyState 发生变化时执行的函数。

readyState 属性保存 XMLHttpRequest 的状态。

  • 0:请求未初始化
  • 1:服务器连接已建立
  • 2:请求已接收
  • 3:正在处理请求
  • 4:请求已完成且响应已就绪

status 属性返回请求的状态号。

  • 200:"OK"
  • 403:"Forbidden"
  • 404:"Page not found"

statusText 属性返回状态文本(例如:"OK" 或 "Not Found")。

注:

每当 readyState 发生变化时就会调用 onreadystatechange 函数。

当 readyState 为 4 ,status 为 200 时,响应就绪:

function loadDoc(){
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function(){
        if(this.readyState == 4 && this.status = 200){
            document.getElementById("demo").innerHTML = this.responseText;
        }
    };
    xhttp.open("GET", "ajax_info.txt", true);
    xhttp.send();
}

onreadystatechange 被触发五次(0-4),每次 readyState 都发生变化。

服务器响应属性

responseText 属性

responseText 属性以 JavaScript 字符串的形式返回服务器响应。

responseXML 属性

XMLHttpRequest 对象有一个内建的 XML 解析器。

responseXML 属性以 XML DOM 对象返回服务器响应。

使用此属性,可以把响应解析为 XML DOM 对象。

服务器响应方法

getAllResponseHeaders() 方法

getAllResponseHeaders() 方法返回所有来自服务器响应的头部信息。

getResponseHeader() 方法

getResponseHeader() 方法返回来自服务器响应的特定头部信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值