XMLHttpRequest,jQuery.ajax,jQuery.post,jQuery.get有什么区别?

我怎样才能找出哪种方法最适合这种情况呢? 任何人都可以提供一些例子来了解function和性能方面的差异吗?

  • 原始浏览器对象中的XMLHttpRequest ,jQuery将其封装成更加​​可用的简化forms和跨浏览器一致的function。

  • jQuery.ajax是jQuery中的一般Ajax请求者,可以执行任何types和内容请求。

  • jQuery.getjQuery.post另一方面只能发出GET和POST请求。 如果你不知道这些是什么,你应该检查HTTP协议并学习一点。 这两个函数在内部使用jQuery.ajax但他们使用特定的设置,您不必设置自己,从而简化GET或POST请求相比,使用jQuery.ajax 。 无论如何,GET和POST是最常用的HTTP方法(与DELETE,PUT,HEAD或甚至其他很less使用的exotics相比)。

所有的jQuery函数都在后台使用XMLHttpRequest对象,但是提供了额外的function,你不必自己做。

用法

所以,如果你使用jQuery,我强烈build议你使用jQueryfunction。 忘记一下XMLHttpRequest 。 使用合适的jQuery请求函数变体,并在所有其他情况下使用$.ajax() 。 所以别忘了还有其他常见的jQuery Ajax相关函数 $.get()$.post()$.ajax() 。 那么你可以使用$.ajax()来处理所有的请求,但是你将不得不多写一些代码,因为它需要更多的选项来调用它。

比喻

这就像你可以买自己的汽车发动机,你必须创造一个整车与转向,刹车等…汽车制造商生产完整的汽车,友好的界面(踏板,方向盘等)所以你不必自己做这一切。

他们每个人使用XMLHttpRequest。 这是浏览器用来提出请求的地方。 jQuery只是一个JavaScript库, $ .ajax方法用于创buildXMLHttpRequest。

$ .post和$ .get只是$.ajax简写版本。 他们做了几乎相同的事情,但更快地写一个AJAX请求 – $.post发出一个HTTP POST请求, $.get发出一个HTTP GET请求。

jQuery.getjQuery.ajax的包装器,它是XMLHttpRequest的包装器。

XMLHttpRequest和Fetch API(在这个时候是实验)是唯一的DOM,所以应该是最快的。

我看到了很多不准确的信息,所以我做了一个testing页面,任何人都可以在任何时候testing哪一个版本是最好的版本:

https://jsperf.com/xhr-vs-jquery-ajax-vs-get-vs-fetch

从我今天的testing中可以看出,只有jQuery不是一个干净的甚至是快速的解决scheme,对我来说在移动设备或者桌面上的结果表明,jQuery至less比XHR2慢80%,如果你使用了太多的ajax,在手机上加载一个简单的网站将花费大量的时间。

用法本身也在链接中。

就jQuery方法而言, .post.get在内部简单地执行.ajax ,它们的目的是将.ajax一些不必要的选项抽象出来,并分别提供适合于该types的请求的一些默认值。

我怀疑这三者之间的performance差异很大。

.ajax方法本身做了一个XMLHttpRequest,它会根据jQuery的其余部分进行大量优化,但它可能不会像你自己定制整个交互一样高效。但是这是写很多代码或者写jQuery.ajax

jQuery.post和jQuery.get模拟典型的页面加载,也就是说,你点击一个提交button,它将带你到一个新的页面(或重新加载相同的页面)。 发送数据并将其发送到服务器的方式稍有不同(有关它的好文章可以在这里find。

jQuery.ajax和XMLHttpRequest是类似于发布和获取的页面加载,但页面不会更改。 无论服务器返回什么信息,本地javascript都可以使用这些信息,包括修改页面布局。 它们通常用于执行asynchronous工作,而用户仍然可以导航页面。 比较好的例子就是自动完成function,通过从数据库中dynamic加载数值来完成文本字段。 jQuery.ajax和XMLHttpRequest的根本区别在于jQuery.ajax使用XMLHttpRequest实现相同的效果,但是接口更简单。 如果你使用jQuery,我鼓励你坚持使用jQuery.ajax。