好奇,如果有人知道数据参数的差异。
我有一个$.post
方法,它将$('#myform').serialize()
作为我的数据参数并且有效。
如果我使用$.ajax()
方法尝试相同操作,则无法正常工作,因为我的数据参数显示不正确。
是否有人知道差异以及我可能会使用什么而不是上述.serialize
?
答案 0 :(得分:69)
这篇文章对你有所帮助。
简而言之:
$.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");
});
答案 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);