【发布时间】:2010-01-16 08:04:38
【问题描述】:
有人知道$("#id").load 和$.ajax 有什么区别吗?
【问题讨论】:
标签: javascript jquery
有人知道$("#id").load 和$.ajax 有什么区别吗?
【问题讨论】:
标签: javascript jquery
load() 发起一个 Ajax 请求以检索 HTML,该请求在返回时设置为给定的选择器。
所有jQuery Ajax functions 都是$.ajax() 的简单包装,所以:
$("#id").load(...);
大概相当于:
$.ajax({
url: "...",
dataType: "html",
success: function(data) {
$("#id").html(data);
}
});
【讨论】:
让我为你澄清一点:
$.ajax() 是 jQuery 提供的基本和低级的 ajax 函数,这意味着你可以做任何你想做的事情,你可以使用 XmlHttpRequest 对象。但曾几何时,jQuery Developers 认为实际上除了$.ajax() 之外,他们可以为开发人员提供更具体的方法,这样他们就不需要传递更多的参数来使$.ajax() 方法按照他们想要的方式工作。例如他们说不是将json作为参数传递给$.ajax()来指示返回数据类型,而是提供$.getJSON()所以我们都知道我们期望的返回类型是json,或者不是指示发送方法作为post 或get,您可以分别使用$.post() 或$.get()。
所以load()是同一个东西,它可以帮助你将html数据注入到你的html中。使用 load() 方法,您知道需要一个 html 部分。
这不是很酷吗?
我想我已经坠入爱河了。
有关更多信息,您可以访问 jquery.com,他们甚至提供了他们的新库和 api 教程页面。
编辑:
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
下同:
$.post("some.php", { name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
});
现在你可以看到它是 $.ajax() 的简化版本,要进行 post 调用,你需要传递一些 send 方法类型的信息,如第一个示例所示,post 但你不要这样做可以使用$.post(),因为你知道你在做什么是post,所以这个版本更加简化和易于使用。
但不要忘记一些事情。除了load(),所有其他 ajax 方法都返回 XHR(XmlHttpRequest 实例),因此您可以将它们视为您正在使用 XmlHttpRequest,实际上您正在使用它 :) 但 load() 返回 jQuery,这意味着:
$("#objectID").load("test.php", { 'choices[]': ["Jon", "Susan"] } );
在上面的示例中,您可以轻松地将返回的 html 注入到#objectID 元素中。不是很酷吗?如果它没有返回 jQuery,那么您应该一直在使用回调函数,您可能会从 data 对象中获取结果并将其手动注入到您想要的 html 元素中。所以会很麻烦,但是使用$.load() 方法,它在jQuery中确实得到了简化。
$("#feeds").load("feeds.php", {limit: 25}, function(){
alert("The last 25 entries in the feed have been loaded");
});
您甚至可以发布参数,因此根据这些参数您可以在服务器端做一些工作并将 html 部分发送回客户端,您可爱的 jQuery 代码会将其注入示例中的#feeds html 元素就在上面。
【讨论】:
$.ajax()的更简化版本
更简洁的总结,最重要的区别是$.ajax允许你设置content-type和datatype。
这两个对于发出 JSON 请求或 XML 请求很重要。 ASP.NET 对缺少内容类型字段(至少在您使用 [WebMethod] 时)更加挑剔,并且只会返回页面的 HTML 而不是 JSON。
$.load() 旨在简单地返回直接 HTML。 $.ajax也给你
加上其他人。
【讨论】:
来自文档...
从远程文件加载 HTML 并将其注入 DOM。
使用 HTTP 请求加载远程页面。这是 jQuery 的低级 AJAX 实现。
load 专门用于获取(通过 GET 除非提供参数,然后使用 POST)HTML 页面并将其直接插入到选定节点(由$(selector).load(...) 的$(selector) 部分选择的节点。
$.ajax(...) 是一种更通用的方法,它允许您发出 GET 和 POST 请求,并且对响应不做任何特定的事情。
我鼓励您阅读文档。
【讨论】:
这是load函数的源代码:http://github.com/jquery/jquery/blob/master/src/ajax.js#L15
如您所见,它是一个$ajax,带有一些选项处理。换句话说,一种方便的方法。
【讨论】:
鉴于使用了 deferred 和 promise 对象,上述答案可能不再有效。我相信使用 .ajax 可以使用 .when,但不能使用 .load。总之,我相信.ajax 比.load 更强大。例如:
some_promise = $.ajax({....});
.when(some_promise).done(function(){.... });
您可以更精细地控制 html 加载。还有 .fail 和 .always 表示失败和“无论如何”的情况。你没有得到这个负载。希望我在这方面是正确的。
【讨论】: