$.ajax()、$.get()和$.load()之间的区别

191

$.ajax()$.get()$.load() 有什么区别?

在什么情况下使用哪一个更好?


可能是[ $("#id").load 和 $.ajax 之间的区别?]的重复问题。(https://dev59.com/o3I95IYBdhLWcg3w8y6N) - Athafoud
9个回答

257

$.ajax() 是最灵活可配置的 ajax 方法,它可以细粒度地控制 HTTP 请求头等信息。通过此方法,您还可以直接访问 XHR 对象。此外,它还提供了更细致的错误处理。因此有时候会更加复杂和不必要,但有时也非常有用。您需要使用回调函数自己处理返回的数据。

$.get() 只是 $.ajax() 的简化版,抽象出了一些配置,并为您隐藏了合理的默认值。它将返回数据传递给一个回调函数。它仅允许 GET 请求,因此伴随着 $.post() 方法进行类似的操作,只不过是针对 POST 请求。

.load() 类似于 $.get(),但添加了功能,使您可以定义返回数据在文档中应该插入的位置。因此只能在调用只会产生 HTML 的情况下使用。它与其他全局调用稍有不同,因为它是绑定到特定 jQuery 封装 DOM 元素的方法。因此,您需要这样做:$('#divWantingContent').load(...)

需要注意的是,所有的 $.get()$.post().load() 都只是 $.ajax() 的封装,因为内部调用的是它。

更多详情,请参阅 jQuery 的 Ajax 文档:http://api.jquery.com/category/ajax/


3
不,它字面上接受你传递给它的变量,并使用它们来执行jQuery.ajax()。 - andrewm
1
太好了,.load() 只是普通的 HTML,而 .get() 对于更多的事情非常有用。 - Luigi Lopez

31

这些方法提供了不同的抽象层次。

  • $.ajax() 提供了对Ajax请求的完全控制。如果其他方法不能满足您的需求,请使用它。

  • $.get() 执行一个Ajax GET请求,返回的数据(可以是任何数据)将被传递给您的回调处理程序。

  • $(selector).load() 将执行一个Ajax GET请求,并设置所选返回数据的内容(应该是文本或HTML)。

根据具体情况选择方法。如果你只需要做简单的事情,则没有必要使用$.ajax()

例如,如果返回的数据是需要进一步处理的JSON格式,您将不会使用$.load()。在这种情况下,您将使用$.ajax()$.get()


10

非常基本但是

  • $.load(): 将一段html加载到一个容器的DOM中。
  • $.get(): 如果你想进行GET请求,并且需要对响应进行详细处理,可以使用该函数。
  • $.post(): 如果你想进行POST请求,但是不需要将响应加载到某个容器的DOM中,可以使用该函数。
  • $.ajax(): 如果你需要在XHR失败时执行某些操作或者需要动态指定ajax选项(例如cache: true),可以使用该函数。

10

http://api.jquery.com/jQuery.ajax/

jQuery.ajax()

描述: 执行异步HTTP(Ajax)请求。

全能型函数,可进行任何类型的Ajax请求。


http://api.jquery.com/jQuery.get/

jQuery.get()

描述: 使用HTTP GET请求从服务器加载数据。

只允许进行HTTP GET请求,需要较少的配置。


http://api.jquery.com/load/

.load()

描述: 从服务器加载数据并将返回的HTML放入匹配的元素中。

专门用于获取数据并将其注入到元素中。


6

重要提示: jQuery.load() 方法不仅可以执行 GET 请求,还可以执行 POST 请求,只要提供了 data 参数(详见:http://api.jquery.com/load/

data 类型:PlainObject 或 String 一个普通对象或字符串,将被发送到服务器端。

请求方法 如果提供了 data 参数,则使用 POST 方法;否则,默认为 GET

Example: pass arrays of data to the server (POST request)
$( "#objectID" ).load( "test.php", { "choices[]": [ "Jon", "Susan" ] } );

5

3
每个人都有权使用。函数 .load, .get.post 是使用函数 .ajax 的不同方式。
个人认为,使用原始的 .ajax 函数非常困惑,我更喜欢根据需要使用 load、get 或 post。
POST 具有以下结构:
$.post(target, post_data, function(response) { });

GET方法有以下特点:

$.get(target, post_data, function(response) { });

LOAD 具有以下功能:

$(*selector*).load(target, post_data, function(response) { });

可以看到它们之间几乎没有区别,因为是情况决定使用哪种方式。需要在内部将信息发送到文件吗?使用.post(这将是大多数情况)。需要以这样的方式发送信息,以便您可以提供到特定时刻的链接?使用.get。它们都允许回调函数,可以处理文件的响应。

重要提示是.load有两种不同的方式。如果只提供目标文档的url,它将像个获取(我这么说是因为我测试了在使用默认.load行为时检查$_POST在被调用的PHP中是否会检测到$_POST,而不是$_GET;也许更精确的说法是它充当没有任何参数的.post); 然而,正如http://api.jquery.com/load/所说,一旦您向函数提供一个参数数组,它将向文件POST信息。无论如何,.load函数都会直接将信息插入到DOM元素中,在许多情况下非常易读、直接;但仍提供回调以便您想要对响应做更多操作。此外,.load允许您从文件中提取某个代码块,使您可以将目录保存在html文件中,并直接将其中的片段(项目)检索到DOM元素中。


1

大家都很好地解释了这个主题。我想再补充一点关于.load()方法的内容。

根据加载文档,如果在数据url中添加后缀选择器,则不会执行加载内容中的脚本。

工作示例

            $(document).ready(function(){
                $("#secondPage").load("mySecondHtmlPage.html #content");
            })

另一方面,在URL中删除选择器后,新内容中的脚本将运行。请尝试this example
在index.html文件中删除URL中的#content后。
            $(document).ready(function(){
                $("#secondPage").load("mySecondHtmlPage.html");
            })

其他讨论方法中没有提供这样的内置功能。


1

两者都用于发送一些数据并使用该数据接收一些响应。

GET: 获取存储在服务器中的信息。(即搜索、推文、个人信息)。如果您想要发送信息,则可以使用process.php?name=subroto发送请求,因此它基本上通过url发送信息。Url不能处理超过2036个字符。所以对于博客文章来说,你能记得它是不可能的吗?

POST: POST和GET做相同的事情。用户注册、用户登录、大数据发送、博客文章。如果需要发送安全信息,则使用post或用于大数据,因为它不通过url传递。

AJAX: $.get()$.post()包含$.ajax()的子集功能。它具有更多的配置。

$.get ()方法是$.ajax()的一种简写。当使用$.get ()时,您需要传入参数而不是传入对象。至少,您需要前两个参数,它们是要检索的文件的URL(例如test.txt)和一个成功回调函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接