74

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

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

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

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

4

7 回答 7

89

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

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

——阿约斯马尼

简而言之,这是:

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

等价于以下内容:

$.ajax({ 
  type: "POST", 
  url: "/ajax", 
  data: {"data": json} 
});
于 2012-10-10T13:07:51.697 回答
51

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

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

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

于 2012-10-10T13:08:55.820 回答
27

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

于 2012-10-10T13:47:03.890 回答
13

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

$.ajax({
    type : 'POST',
    url : url,
    data : data,
    success : success,
    dataType : dataType
});
于 2012-10-10T13:11:07.983 回答
3

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

请尝试使用:

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

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

于 2016-04-12T20:51:38.783 回答
0

使用 $.ajax 我们可以发出 GET 或 POST 请求。使用 $.post 我们只能发出 post 请求。使用 $.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
于 2021-04-22T23:28:07.587 回答
-6

$.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);
于 2014-09-24T11:23:14.837 回答