【问题标题】:Difference between $.post and $.ajax?$.post 和 $.ajax 之间的区别?
【发布时间】:2012-09-30 23:13:05
【问题描述】:

好奇是否有人知道数据参数的区别。

我有一个 $.post 方法,它将 $('#myform').serialize() 作为我的数据参数并且可以工作。

如果我使用 $.ajax() 方法尝试相同的方法,它不起作用,因为我的数据参数看起来不正确。

有谁知道区别以及我可以使用什么来代替上面的.serialize

【问题讨论】:

标签: javascript jquery ajax asp.net-mvc serialization


【解决方案1】:

使用 $.ajax 我们可以发出 GET 或 POST 请求。 使用 $.post 我们只能发出 post 请求。 使用 $.get 我们只能发出 get 请求。

$.ajax()    // Performs an async AJAX request
$.get()     // Loads data from a server using an AJAX HTTP GET request
$.post()    // Loads data from a server using an AJAX HTTP POST request

【讨论】:

    【解决方案2】:

    这个jquery forum thread 总结了一下:

    $.post 是在 POST 请求中使用$.ajax 的一种简写方式,因此使用两者之间没有太大区别——它们都可以使用相同的底层代码。 $.get 的工作原理类似。

    —addyosmani

    简而言之,就是这样:

    $.post( "/ajax", {"data" : json }) 
    

    等价于:

    $.ajax({ 
      type: "POST", 
      url: "/ajax", 
      data: {"data": json} 
    });
    

    【讨论】:

      【解决方案3】:

      在重新阅读了一些在线文档后,我决定坚持使用 $.post 而不是 $.ajax。

      $.ajax 方法的数据参数与 $.post 方法的作用不同,不确定到底是什么,但有区别。

      我想使用 $.ajax 的唯一原因是因为我希望能够处理事件并且没有意识到我可以使用 $.post 来做到这一点。

      这就是我最终得到的结果

      function GetSearchItems() {
          var url = '@Url.Action("GetShopSearchResults", "Shop", New With {.area = "Shop"})';
          var data = $("#ShopPane").serialize();
          // Clear container
          $('#shopResultsContainer').html('');
          // Retrieve data from action method
          var jqxhr = $.post(url, data);
          // Handle results
          jqxhr.success(function(result) {
              //alert("ajax success");
              $('#shopResultsContainer').html(result.ViewMarkup);
          });
          jqxhr.error(function() {
              //alert("ajax error");
          });
          jqxhr.complete(function() {
              //alert("ajax complete");
          });
      
          // Show results container
          $("#shopResultsContainer").slideDown('slow');
      }
      

      JQuery 3.x

      jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调 从 jQuery 3.0 开始删除方法。您可以使用 jqXHR.done(), jqXHR.fail() 和 jqXHR.always() 代替。

      var jqxhr = $.post(url, data);
      // Handle results
      jqxhr.done(function(result) {
          //alert("ajax success");
      });
      jqxhr.fail(function() {
          //alert("ajax error");
      });
      jqxhr.always(function() {
          //alert("ajax complete");
      });
      

      https://api.jquery.com/jquery.post/

      【讨论】:

      • “jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调方法在 jQuery 3.0 中被移除。” - api.jquery.com/jquery.post
      • 很清楚。这篇文章是 4 年前的。
      • 你为什么回滚我对你答案的补充?
      • 丹尼斯,我很抱歉,这完全是一个错误。我更正了。
      • 没问题,只需要询问我是否做错了什么或者应该改进我的编辑。祝您度过愉快的一周。
      【解决方案4】:

      $.ajax 中你可以同步,但在$.post 函数中是不可能的。同步意味着你可以得到返回的结果。

      var tmp;
      $.ajax({
          'async': false,
          'type': "POST",
          'global': false,
          'dataType': 'html',
          'url': "Your Url",
          'data': {'type': 'data'},
          'success': function (data) {
              tmp = data;
          }
      });
      alert(tmp);
      

      【讨论】:

      • 这不是真的。您可以通过以下方式获得返回结果:$.post ("your.php", function(data) { _reference **data** as your returned result_ })
      • nagaking,这是绝对不正确的信息,不应该有任何支持。 $.ajax、$.post 和 $.get 都可以返回结果。
      • @EdDeGagne 您无法在 post 函数之外获得返回响应
      • Async 选项在我所见的情况下已被弃用,为了从 ajax 调用中获得结果,有更好的方法不会让我们的浏览器无法响应。就像使用成功回调一样。
      【解决方案5】:

      作为补充,在接受的答案中,提到“$.ajax 方法的数据参数与 $.post 方法的作用不同,不确定究竟是什么,但有区别"

      请尝试使用:

          { 
              ... 
              data: JSON.stringify(yourJsonData), 
              ... 
          }
      

      否则,json 对象将作为 url 编码的字符串插入有效负载中。

      【讨论】:

        【解决方案6】:

        您是否将其指定为数据参数。 $.post 只是 $.ajax 的简写,它期待以下内容。

        $.ajax({
            type : 'POST',
            url : url,
            data : data,
            success : success,
            dataType : dataType
        });
        

        【讨论】:

          【解决方案7】:

          这里的问题不是$.ajax() 不起作用,而是因为您没有在Ajax 请求中设置类型参数,它默认为GET 请求。数据是通过 get 的查询字符串发送的,如果您的后端期望它们作为 post 参数,它将不会读取它们。

          $.post 只是与$.ajax() 的调用,只是与type 集合。阅读docs,您将看到$.ajax() 默认为我上面提到的GET。

          如果您转到 jQuery 文档中的 jQuery.post 页面,它会显示带有类型集的 $.ajax 请求。再次阅读文档。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-05-27
            • 1970-01-01
            • 1970-01-01
            • 2017-03-10
            • 2019-02-15
            • 1970-01-01
            • 2011-02-20
            相关资源
            最近更新 更多