为什么我的$.post()不起作用,而$.ajax()起作用



我正在构建一个非常简单的函数,通过AJAX向服务器发送一个整数。我以前总是这样做,但突然间我遇到了jQuery.post方法的问题。

以下不起作用:

jQuery.post({
dataType : 'json',
url : server_vars.ajax_url,
data : {
action : 'toggle_book',
_ajax_nonce : server_vars.nonce,
book_id : book_id
},
success : function( response ) {
if( response.success ) {
alert('done');
}
else {
alert('error');
}
}
});

我得到以下404错误:

POSThttp://example.com/[object%20Object]

但是,如果我将代码切换到以下内容,它就会工作:

jQuery.ajax({
method : 'post',
dataType : 'json',
url : server_vars.ajax_url,
data : {
action : 'toggle_book',
_ajax_nonce : server_vars.nonce,
book_id : book_id
},
success : function( response ) {
if( response.success ) {
alert('done');
}
else {
alert('error');
}
}
});

我的server_vars变量没有错,它只是一个json对象,我可以在其他任何地方访问(包括上面的"固定"代码(。我在谷歌上搜索了一下post方法是否被弃用,但事实似乎并非如此。

我已经做了一百万次了,突然间,它开始给我带来这个问题,我觉得很困惑。

这是在WordPress 5.5 上运行的

有什么想法吗?

从您发布的url中的[object%20Object],它似乎试图将对象转换为字符串。

这可能意味着您使用的是1.12之前的jQuery版本,该版本不支持只传递选项对象。

如果您看到jQuery.post的签名(适用于v1.12(,您将看到url是第一个参数,并且不会进入选项对象。

jQuery.post(server_vars.ajax_url, {
dataType : 'json',
data : {
action : 'toggle_book',
_ajax_nonce : server_vars.nonce,
book_id : book_id
},
success : function( response ) {
if( response.success ) {
alert('done');
}
else {
alert('error');
}
}
});

最新更新