想知道有关数据参数的区别。
我有一个$.post
方法,将$('#myform').serialize()
作为我的数据参数使用起来很有效。
如果我尝试使用$.ajax()
方法,由于我的数据参数不正确,它就无法正常工作。
有人知道差异在哪里以及我可以使用什么替代上述.serialize
吗?
想知道有关数据参数的区别。
我有一个$.post
方法,将$('#myform').serialize()
作为我的数据参数使用起来很有效。
如果我尝试使用$.ajax()
方法,由于我的数据参数不正确,它就无法正常工作。
有人知道差异在哪里以及我可以使用什么替代上述.serialize
吗?
这个jQuery论坛帖子概括了:
$.post
是使用$.ajax
简写的方式来进行POST请求,因此在使用这两种方法之间并没有太大的区别——它们都使用了相同的基础代码。$.get
也是采用类似的原理。—addyosmani
简而言之:
$.post( "/ajax", {"data" : json })
等同于以下内容:
$.ajax({
type: "POST",
url: "/ajax",
data: {"data": json}
});
这里的问题不在于 $.ajax()
没有工作,而是因为您没有在Ajax请求中设置type参数,默认为GET请求。对于get请求,数据通过查询字符串发送,如果后端期望它们作为post参数,它将无法读取它们。
$.post
只是一个带有设置type
的$.ajax()
调用。阅读文档,您会发现默认情况下$.ajax()
是GET请求,正如我上面所提到的。
如果您转到jQuery文档中的 jQuery.post 页面,它将向您展示带有设置类型的$.ajax请求。再次阅读文档。
在重新阅读一些在线文档后,我决定坚持使用 $.post 而不是 $.ajax。
$.ajax 方法的 data 参数与 $.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
自jQuery 3.0版本起,jqXHR.success()、jqXHR.error()和jqXHR.complete() 回调方法被移除。您可以使用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
});
{
...
data: JSON.stringify(yourJsonData),
...
}
通过使用$.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
$.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);
$.post("your.php", function(data) { _把**data**作为你的返回结果_ })
- blurgoon