好奇是否有人知道数据参数有什么区别。
我有一个$.post
方法将 a$('#myform').serialize()
作为我的数据参数并起作用。
如果我使用该$.ajax()
方法尝试相同的方法,则它不起作用,因为我的数据参数看起来不正确。
有谁知道其中的区别以及我可能会使用什么来代替上述内容.serialize
?
好奇是否有人知道数据参数有什么区别。
我有一个$.post
方法将 a$('#myform').serialize()
作为我的数据参数并起作用。
如果我使用该$.ajax()
方法尝试相同的方法,则它不起作用,因为我的数据参数看起来不正确。
有谁知道其中的区别以及我可能会使用什么来代替上述内容.serialize
?
这个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");
});
您是否将此指定为数据参数。$.post
只是一个速记,$.ajax
期待以下内容。
$.ajax({
type : 'POST',
url : url,
data : data,
success : success,
dataType : dataType
});
作为补充,在已接受的答案中,提到“ $.ajax 方法的数据参数与 $.post 方法所做的事情有所不同,不确定究竟是什么,但存在差异”
请尝试使用:
{
...
data: JSON.stringify(yourJsonData),
...
}
否则,json 对象将作为 url 编码的字符串插入到有效负载中。