传统上,网页需要重新加载才能更新其内容。对于基于网络的电子邮件,这意味着用户必须手动重新加载收件箱才能查看是否有新邮件。这有巨大的缺点:它速度慢,并且需要用户输入。当用户重新加载收件箱时,服务器必须重建整个网页并重新发送所有的 HTML、CSS、JavaScript 以及用户的电子邮件。这是非常低效的。理想情况下,服务器应该只需要发送用户的新消息,而不是整个页面。到 2003 年,所有主流浏览器都通过采用 XMLHttpRequest (XHR) 对象解决了这个问题,允许浏览器在不需要重新加载页面的情况下与服务器通信。
XMLHttpRequest 对象是 Ajax(Asynchronous JavaScript and XML,异步 JavaScript 和 XML)技术的一部分。使用 Ajax,数据可以通过 XMLHttpRequest API 在浏览器和服务器之间传输,而无需重新加载网页。随着 XMLHttpRequest 对象的广泛采用,很快就可以构建像 Google 地图和 Gmail 这样的 Web 应用程序,它们使用 XMLHttpRequest 来获取新的地图瓦片或新邮件,而无需重新加载整个页面。
Ajax 请求由 JavaScript 代码触发;您的代码向 URL 发送请求,当它接收到响应时,可以触发回调函数来处理响应。由于请求是异步的,因此在处理请求时,代码的其余部分会继续执行,因此必须使用回调来处理响应。
不幸的是,不同的浏览器以不同的方式实现 Ajax API。通常这意味着开发人员必须考虑所有不同的浏览器,以确保 Ajax 能够普遍工作。幸运的是,jQuery 提供了 Ajax 支持,它抽象了痛苦的浏览器差异。它既提供了功能齐全的 $.ajax() 方法,也提供了简单的便捷方法,例如 $.get()、$.getScript()、$.getJSON()、$.post() 和 $().load()。
尽管名为“Ajax”,但大多数 jQuery 应用程序实际上并不使用 XML;相反,它们将数据作为纯 HTML 或 JSON(JavaScript Object Notation)传输。
一般来说,Ajax 不跨域工作。例如,从 example1.com 加载的网页无法向 example2.com 发出 Ajax 请求,因为它会违反同源策略。作为一种变通方法,JSONP(带填充的 JSON)使用 <script> 标签从另一个域加载包含任意 JavaScript 内容和 JSON 的文件。最近,浏览器实现了一种名为跨域资源共享(CORS)的技术,允许 Ajax 请求发送到不同的域。