XMLHttpRequest
是浏览器原始对象,jQuery将其包装成更可用、简化形式和跨浏览器一致的功能。
jQuery.ajax
是jQuery中的通用Ajax请求者,可以处理任何类型和内容的请求。
jQuery.get
和 jQuery.post
只能发出GET和POST请求。如果你不知道这些是什么,请查看HTTP协议并学习一下。这两个函数在内部使用jQuery.ajax
,但它们使用特定的设置,您不必设置自己,因此相对于使用jQuery.ajax
来说简化了GET或POST请求。GET和POST是最常用的HTTP方法(与DELETE、PUT、HEAD甚至其他不常用的奇特方法相比)。
所有jQuery函数都在后台使用XMLHttpRequest
对象,但提供了您不必自己完成的其他功能。
因此,如果您正在使用jQuery,我强烈建议您仅使用jQuery功能。完全忘记XMLHttpRequest
。使用适当的jQuery请求函数变体,在所有其他情况下使用$.ajax()
。所以不要忘记,还有其他常见jQuery与Ajax相关的函数,如$.get()
、$.post()
和 $.ajax()
。您也可以只使用$.ajax()
进行所有请求,但需要编写更多的代码,因为它需要更多的选项来调用。
这就像你可以购买一台车引擎,但你需要自己构建整个车辆,包括方向盘、刹车等... 车厂则生产出已经完成的汽车,并提供友好的界面(踏板、方向盘等),因此你不必自己动手。
$.post
和$.get
,唯一比它们慢的是在调用$.ajax
之前的少量代码。但是,如果你使用XHR直接编写自己的例程,可能会更加优化,但也可能更加容易出现错误。我建议你保持在jQuery方面。这将使你的生活更轻松。而且考虑到异步调用所花费的时间比发出调用的代码要长得多,你可能不会注意到这些调用之间有明显的区别。 - Robert KoritnikGET
请求将会把所有数据都以URL字符串的形式发送过去——但这个长度可能会被客户端/服务器限制 (https://dev59.com/a3E85IYBdhLWcg3wr1ke)。而`POST`请求则会将所有数据都放在头部中发送,因此URL大小限制一般不会成为问题(除非你的脚本名称和文件夹名称非常长!)。 - Jonathon BolsterjQuery.get
是jQuery.ajax
的封装,而jQuery.ajax
又是 XMLHttpRequest 的封装。
XMLHttpRequest 和 Fetch API(目前处于实验阶段)是 DOM 中唯一的,在速度上应该是最快的。
我看到了很多信息,但现在已经不准确了,所以我制作了一个测试页面,任何人都可以测试不同版本哪个最好:
https://jsperf.com/xhr-vs-jquery-ajax-vs-get-vs-fetch
从今天我的测试结果来看,只有 jQuery 并不是一个干净或者说是一个快速的解决方案,对于移动端或桌面端而言,结果显示 jQuery 至少比 XHR2 慢80%以上,如果您使用了太多 ajax,在移动端上加载简单的网站将需要很长时间。
链接中也包含了用法。
jQuery.post和jQuery.get模拟了典型的页面加载方式,也就是说,您单击提交按钮后会进入新页面(或重新加载同一页面)。post和get在发送数据到服务器的方式上略有不同(可以在这里找到相关文章)。
jQuery.ajax和XMLHttpRequest类似于post和get的页面加载,但页面不会改变。服务器返回的任何信息都可以被本地javascript使用,以任何方式使用,包括修改页面布局。它们通常用于在用户仍然可以浏览页面时执行异步工作。一个很好的例子是通过动态加载数据库中的值来完成文本字段的自动完成功能。 jQuery.ajax和XMLHttpRequest之间的根本区别在于,jQuery.ajax使用XMLHttpRequest实现相同的效果,但具有更简单的接口。如果您使用jQuery,我建议您坚持使用jQuery.ajax。
旧帖子,但仍想回答。我在使用 Web Workers (JavaScript) 时遇到的一个不同之处是:Web Workers 无法访问任何 UI 级别的内容。这意味着在你打算使用 Web Workers 运行的 JavaScript 代码中无法访问任何 DOM 元素。例如 window、document 和 parent 等对象不能在 Web Workers 代码中访问。
正如我们所知,jQuery 库与 HTML DOM 相关联,允许它将违反“无 DOM 访问”规则。这可能有点痛苦,因为无法在 Web Workers 中使用 jQuery.ajax、jQuery.post、jQuery.get 等方法。幸运的是,您可以使用 XMLHttpRequest 对象进行 Ajax 请求。
.post
和.get
只是在内部执行.ajax
,它们的目的是抽象掉一些不必要的.ajax
选项,并分别提供适用于该类型请求的一些默认值。.ajax
方法本身执行XMLHttpRequest,它将根据jQuery的其余部分进行大量优化,但它可能不像您自己定制整个交互那样高效...但这就是编写大量代码或编写jQuery.ajax
之间的区别。
Set-Cookie
进行登录。我发现使用 jQuery.ajax 时 cookie 可以正常工作,但是当我使用xhr.withCredentials=true
的 XmlHttpRequest 时却不行。 - neoneye