$.post 和 $.ajax 的区别?

IT技术 javascript jquery ajax asp.net-mvc serialization
2021-03-07 03:39:04

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

我有一个$.post方法将 a$('#myform').serialize()作为我的数据参数并起作用。

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

有谁知道其中的区别以及我可能会使用什么来代替上述内容.serialize

6个回答

这个jquery 论坛线程总结了它:

$.post$.ajax用于 POST 请求的速记方式,因此使用两者之间没有太大区别 - 它们都可以使用相同的底层代码实现。$.get工作原理类似。

——阿迪斯马尼

简而言之,这:

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

等效于以下内容:

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

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

$.post只是一个电话$.ajax(),只是与type集合。阅读文档,您将看到$.ajax()默认为我上面提到的 GET。

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

在重新阅读了一些在线文档后,我决定坚持使用 $.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/

你为什么要回滚我对你的回答的补充?
2021-04-20 03:39:04
很清楚。这篇文章是4年前的。
2021-04-22 03:39:04
丹尼斯,我很抱歉,这完全是错误的。我纠正了它。
2021-04-25 03:39:04
没问题,只需要检查我是否做错了什么或应该改进我的编辑。周末愉快。
2021-05-06 03:39:04
“jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调方法从 jQuery 3.0 开始被删除。” - api.jquery.com/jquery.post
2021-05-14 03:39:04

您是否将此指定为数据参数。$.post只是一个速记,$.ajax期待以下内容。

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

作为补充,在已接受的答案中,提到“ $.ajax 方法的数据参数与 $.post 方法所做的事情有所不同,不确定究竟是什么,但存在差异

请尝试使用:

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

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