好奇是否有人知道数据参数的区别。
我有一种$.post
方法,它将 a$('#myform').serialize()
作为我的数据参数并且可以工作。
如果我使用该方法尝试相同的$.ajax()
方法,则它不起作用,因为我的数据参数看起来不正确。
有谁知道区别以及我可以使用什么来代替上面的.serialize
?
好奇是否有人知道数据参数的区别。
我有一种$.post
方法,它将 a$('#myform').serialize()
作为我的数据参数并且可以工作。
如果我使用该方法尝试相同的$.ajax()
方法,则它不起作用,因为我的数据参数看起来不正确。
有谁知道区别以及我可以使用什么来代替上面的.serialize
?
这个jquery 论坛线程总结了它:
$.post
是一种用于 POST 请求的简写方式$.ajax
,因此使用两者之间没有太大区别——它们都可以使用相同的底层代码。$.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 编码的字符串插入到有效负载中。
使用 $.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
在$.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);