如何找出最适合某种情况的方法? 任何人都可以提供一些例子来了解功能和性能方面的差异吗?
-
关于性能(几乎没有答案):根据jsperf使用常规XMLHttpRequest比通过jQuery快得多。
-
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甚至其他很少使用的exotics相比)。
所有jQuery函数都在后台使用XMLHttpRequest对象,但提供了您不必自己执行的其他功能。
用法
因此,如果您使用的是jQuery,我强烈建议您仅使用jQuery功能。完全忘记XMLHttpRequest。使用合适的jQuery请求函数变体,在所有其他情况下使用$.ajax()。所以不要忘记$.get(),$.post()和$.ajax()还有其他常见的jQuery Ajax相关函数。那么你可以使用$.ajax()来处理你的所有请求,但是你需要编写更多的代码,因为它需要更多的选项来调用它。
比喻
这就像你可以自己买一辆汽车发动机,你必须用转向,刹车等制造一辆整车。汽车制造商生产完整的汽车,具有友好的界面(踏板,方向盘等)所以你不必自己动手。
-
在性能方面使用$ .ajax()是否有任何优势?
-
@Rodrigues:不是真的。如果你想到$.post和$.get,那么在调用$.ajax之前,只有少量代码会变慢。但是,如果您使用XHR编写自己的例程,事情可能会稍微优化但可能会更加错误。我建议你把自己放在jQuery方面。它会让你的生活更轻松。考虑到异步调用比发出它的代码花费的时间长得多,你可能会注意到这些调用之间没有明显的区别。
-
谢谢Robert Koritnik。所以我会得到$ .post和$ .get。
-
如果您愿意,您也可以使用$.ajax来使您的呼叫始终如一。只要你不直接使用XHR,你就可以这样做。
-
@RobertKoritnik IE中的缓存问题怎么样?使用XMLHttpRequest和$ .ajax()是否相同?
-
比喻+1。
-
就像比喻一样,for-dummies的语言和例子立即脱颖而出。
-
如果ajax只是xmlhttprequest的包装器 - 我无法弄清楚,为什么我无法使ajax post请求工作(我将它指向WEB API Post方法和[FromBody]输入参数始终为NULL)。但是,当我使用xmlhttprequest时 - 没关系,从表单中按预期选择参数... ajax的参数应该如何?我已经尝试了$(form).serialize(),但没有用...而且,从未在ajax中调用成功方法。现在我使用http.send(参数)+ http.onreadystatechange,它被完全解雇了。
他们每个人都使用XMLHttpRequest。这是浏览器用于发出请求的内容。 jQuery只是一个JavaScript库,$ .ajax方法用于创建XMLHttpRequest。
$ .post和$ .get只是$.ajax的简写版本。它们几乎完全相同,但可以更快地编写AJAX请求 - $.post发出HTTP POST请求,$.get发出HTTP GET请求。
-
上传和下载各个功能的数据传输限制怎么样?
-
GET请求将发送URL字符串中的所有数据 - 可以由客户端/服务器限制(stackoverflow.com/questions/2659952/…)。 POST请求会发送标头中的所有数据,因此URL大小限制应该不是问题(除非您的脚本中有非常长的文件和文件夹名称!)。
-
好。所以简而言之,要发送更多数据使用post并接收更多数据使用get,对吧?
-
@Rodrigues - 是的,非常多:)一般来说,如果您只是想要阅读某些内容(例如请求从Twitter获取推文列表),请使用GET。如果您要发送内容(例如发布推文),请使用POST,
jQuery.get是jQuery.ajax的包装器,它是XMLHttpRequest的包装器。
XMLHttpRequest和Fetch API(此时为实验)是DOM中唯一的,因此应该是最快的。
我看到了很多不准确的信息,所以我做了一个测试页面,任何人都可以在任何时候从最适合的版本测试版本:
https://jsperf.com/xhr-vs-jquery-ajax-vs-get-vs-fetch
从我今天的测试中可以看出,只有jQuery不是一个干净甚至是快速的解决方案,我在移动或桌面上的结果表明,如果你使用太多的ajax,jQuery比XHR2至少慢80%,在移动设备中加载一个简单的网站需要花费很多时间。
用法本身也在链接中。
jQuery.post和jQuery.get模拟典型的页面加载,也就是说,单击提交按钮,它会将您带到一个新页面(或重新加载同一页面)。发布并在数据发送到服务器的方式上略有不同(有关它的好文章可以在这里找到。
jQuery.ajax和XMLHttpRequest是类似于post和get的页面加载,除了页面没有改变。无论服务器返回什么信息,本地javascript都可以使用它以任何方式使用,包括修改页面布局。它们通常用于进行异步工作,而用户仍然可以浏览页面。这方面的好例子是通过从数据库值动态加载来完成文本字段的自动完成功能。 jQuery.ajax和XMLHttpRequest之间的根本区别在于jQuery.ajax使用XMLHttpRequest来实现相同的效果,但界面更简单。如果你使用jQuery,我建议你坚持使用jQuery.ajax。
-
使用jquery而不是创建XMLHttpRequest对象xmlhttp.open,send()和responseText有什么好处。
-
XMLHttpRequest对象根据您当前的浏览器进行不同的实例化。它需要你使用XMLHttpRequest来提供一个基本界面。如果您已经拥有了jQuery,它会为您完成所有工作。这真的是一个方便而不是功能的问题,因为你可以从技术上做同样的事情。更不用说因为jQuery包装了XMLHttpRequest对象,所以它意味着它提供给你,以防你想要做一些特殊的事情。
-
好的..谢谢Neil的建议......有没有像visual studio这样的IDE可以使用和调试jquery与php或aspx。
-
很难找到一个允许你调试javascript和php或aspx的IDE,因为一个是服务器端而另一个是客户端。这意味着,不幸的是,你必须单独调试javascript。但是,我发现firebug(getfirebug.com)在调试javascript方面非常出色。在回调函数中放置一个断点,它会向您显示服务器所提供的所有内容,并逐步显示您的javascript所做的一切。希望有所帮助。
老帖子。但仍想回答,我在使用Web Workers时面临的一个不同之处(javascript)
Web worker无法进行任何UI级别的访问。这意味着您无法访问任何DOM
您打算使用Web worker运行的JavaScript代码中的元素。无法在Web工作器代码中访问窗口,文档和父级等对象。
我们知道jQuery库与HTML DOM绑定,并允许它违反"无DOM访问"规则。这可能有点痛苦,因为jQuery.ajax,jQuery.post,jQuery.get等方法不能在Web worker中使用。幸运的是,你可以使用
XMLHttpRequest对象发出Ajax请求。
就jQuery方法而言,.post和.get只是在内部执行.ajax,其目的是抽象出.ajax的一些不必要的选项,并分别提供适合该类型请求的一些默认值。
我怀疑3中任何一个之间的性能差异很大。
.ajax方法本身就是一个XMLHttpRequest,它将根据jQuery的其余部分进行大量优化,但它可能不会像你自己定制整个交互一样高效..但这就是写批次之间的区别代码或写jQuery.ajax。
-
自定义jQuery.ajax有什么好处
-
我认为你的意思是在速记方法上使用它,根据我的经验,如果你需要非常具体地了解如何获得所需的数据,我发现如果大多数默认值都是你想要的,那么速记的有用。 ajax通常是要走的路。
-
谢谢Steve。将使用post并获取。如果你给出一些.ajax的例子,我可以做一些比较。