$ .post和$ .ajax之间的区别?

时间:2012-10-10 13:06:46

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

好奇,如果有人知道数据参数的差异。

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

如果我使用$.ajax()方法尝试相同操作,则无法正常工作,因为我的数据参数显示不正确。

是否有人知道差异以及我可能会使用什么而不是上述.serialize

7 个答案:

答案 0 :(得分:69)

这篇文章对你有所帮助。

Forum Link

简而言之:

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

相当于:

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

答案 1 :(得分:45)

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

$.post只是与$.ajax()的通话,只有type设置。阅读docs,您会看到$.ajax()默认为GET,如上所述。

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

答案 2 :(得分:16)

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

答案 3 :(得分:12)

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

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

答案 4 :(得分:2)

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

请尝试使用:

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

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

答案 5 :(得分:0)

使用 $.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

答案 6 :(得分:-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);