Ajax

传统上,网页需要重新加载才能更新其内容。对于基于网络的电子邮件,这意味着用户必须手动重新加载收件箱以检查是否有新邮件。这有很大的缺点:它很慢,并且需要用户输入。当用户重新加载收件箱时,服务器必须重建整个网页并重新发送所有 HTML、CSS、JavaScript 以及用户的电子邮件。这是极低效的。理想情况下,服务器只需要发送用户的邮件,而不是整个页面。到 2003 年,所有主流浏览器都通过采用 XMLHttpRequest (XHR) 对象解决了此问题,允许浏览器与服务器通信,而不需要重新加载页面。

XMLHttpRequest 对象是称为 Ajax(异步 JavaScript 和 XML)的技术的一部分。使用 Ajax,可以使用 XMLHttpRequest API 在浏览器和服务器之间传递数据,而无需重新加载网页。随着 XMLHttpRequest 对象的广泛采用,很快就可以构建诸如 Google 地图和 Gmail 等使用 XMLHttpRequest 获取新地图块或新电子邮件而不必重新加载整个页面的 Web 应用程序。

Ajax 请求由 JavaScript 代码触发;你的代码向 URL 发送请求,当它收到响应时,可以触发回调函数来处理响应。由于请求是异步的,因此在处理请求时,你的代码的其余部分将继续执行,因此必须使用回调来处理响应。

不幸的是,不同的浏览器对 Ajax API 的实现方式不同。通常这意味着开发人员必须考虑所有不同的浏览器,以确保 Ajax 能够普遍使用。幸运的是,jQuery 提供了 Ajax 支持,可以抽象掉浏览器之间的痛苦差异。它既提供了功能齐全的 $.ajax() 方法,也提供了简单的便利方法,如 $.get()$.getScript()$.getJSON()$.post()$().load()

尽管名称为“Ajax”,但大多数 jQuery 应用程序实际上并不使用 XML;相反,它们将数据传输为纯 HTML 或 JSON(JavaScript 对象表示法)。

通常,Ajax 无法跨域工作。例如,从 example1.com 加载的网页无法向 example2.com 发出 Ajax 请求,因为它会违反同源策略。作为一种解决方法,JSONP(带填充的 JSON)使用 <script> 标签从另一个域加载包含任意 JavaScript 内容和 JSON 的文件。最近,浏览器实现了一项称为跨源资源共享 (CORS) 的技术,允许向不同域发出 Ajax 请求。