【问题标题】:Difference between $("#id").load and $.ajax?$("#id").load 和 $.ajax 之间的区别?
【发布时间】:2010-01-16 08:04:38
【问题描述】:

有人知道$("#id").load$.ajax 有什么区别吗?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

load() 发起一个 Ajax 请求以检索 HTML,该请求在返回时设置为给定的选择器。

所有jQuery Ajax functions 都是$.ajax() 的简单包装,所以:

$("#id").load(...);

大概相当于:

$.ajax({
  url: "...",
  dataType: "html",
  success: function(data) {
    $("#id").html(data);
  }
});

【讨论】:

  • 这是做什么的? $("#id").html(数据)?它会用“数据”覆盖 .innerHtml 吗?
  • 所以使用 .load 至少你不需要提供成功/失败的方法......我说得对吗?
  • 是的。 html() 等价于 element.innerHTML = "..."。 load() 提供了一个成功回调选项(参见上面链接的页面),但没有失败挂钩。
【解决方案2】:

让我为你澄清一点:

$.ajax() 是 jQuery 提供的基本和低级的 ajax 函数,这意味着你可以做任何你想做的事情,你可以使用 XmlHttpRequest 对象。但曾几何时,jQuery Developers 认为实际上除了$.ajax() 之外,他们可以为开发人员提供更具体的方法,这样他们就不需要传递更多的参数来使$.ajax() 方法按照他们想要的方式工作。例如他们说不是将json作为参数传递给$.ajax()来指示返回数据类型,而是提供$.getJSON()所以我们都知道我们期望的返回类型是json,或者不是指示发送方法作为postget,您可以分别使用$.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 元素就在上面。

【讨论】:

  • 感谢伙伴,这是一个完美的描述。所以 .getJSON 和 .post 和 .get 也都是 ajax 调用吧?不错!
  • yeap.. 它们都是 ajax 调用,是$.ajax()的更简化版本
  • 我在我的帖子中做了一些改进,也许它甚至可以帮助你更多。很高兴为您提供帮助。
  • 一个优秀而简洁的解释,所以需要更多这样的东西。
  • @damiien:我同意你的观点,亚伦,你应该维护一个博客 :)
【解决方案3】:

更简洁的总结,最重要的区别是$.ajax允许你设置content-typedatatype

这两个对于发出 JSON 请求或 XML 请求很重要。 ASP.NET 对缺少内容类型字段(至少在您使用 [WebMethod] 时)更加挑剔,并且只会返回页面的 HTML 而不是 JSON。

$.load() 旨在简单地返回直接 HTML。 $.ajax也给你

  • 缓存
  • 错误处理
  • 数据过滤
  • 密码

加上其他人。

【讨论】:

    【解决方案4】:

    来自文档...

    $(selector).load(..)

    从远程文件加载 HTML 并将其注入 DOM。

    $.ajax(...)

    使用 HTTP 请求加载远程页面。这是 jQuery 的低级 AJAX 实现。

    load 专门用于获取(通过 GET 除非提供参数,然后使用 POST)HTML 页面并将其直接插入到选定节点(由$(selector).load(...)$(selector) 部分选择的节点。

    $.ajax(...) 是一种更通用的方法,它允许您发出 GET 和 POST 请求,并且对响应不做任何特定的事情。

    我鼓励您阅读文档。

    【讨论】:

    • 如果 .load 是异步的,那么它也使用 xhtmlrequestobject 吗?
    • 这方面的最佳文档是什么?是jquery网站吗?
    • jQuery 中的所有远程请求都使用 HttpXmlRequest 或 Active X 控件,具体取决于环境。是的,jquery 文档是最好的文档。
    【解决方案5】:

    这是load函数的源代码:http://github.com/jquery/jquery/blob/master/src/ajax.js#L15

    如您所见,它是一个$ajax,带有一些选项处理。换句话说,一种方便的方法。

    【讨论】:

      【解决方案6】:

      鉴于使用了 deferred 和 promise 对象,上述答案可能不再有效。我相信使用 .ajax 可以使用 .when,但不能使用 .load。总之,我相信.ajax 比.load 更强大。例如:

            some_promise = $.ajax({....});
            .when(some_promise).done(function(){.... });
      

      您可以更精细地控制 html 加载。还有 .fail 和 .always 表示失败和“无论如何”的情况。你没有得到这个负载。希望我在这方面是正确的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-30
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 2010-11-08
        相关资源
        最近更新 更多