Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为什么我的$.post()不工作,而$.ajax()工作?_Jquery_Ajax - Fatal编程技术网

Jquery 为什么我的$.post()不工作,而$.ajax()工作?

Jquery 为什么我的$.post()不工作,而$.ajax()工作?,jquery,ajax,Jquery,Ajax,我正在构建一个非常简单的函数,它通过AJAX向服务器发送一个整数。我过去一直是这样做的,但突然间我遇到了jQuery.post方法的问题 以下操作不起作用: jQuery.post({ dataType : 'json', url : server_vars.ajax_url, data : { action : 'toggle_book', _ajax_nonce : server_vars.nonce, book_id

我正在构建一个非常简单的函数,它通过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错误:

职位

但是,如果我将代码切换到以下位置,它将起作用:

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方法是否遭到了反对,而事实似乎并非如此

我已经做了一百万次了,突然间它开始给我这个问题,我感到困惑

这是在WordPress5.5上运行的


有什么想法吗?

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

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

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');
        }
    }
});
如果您看到的签名(对于v1.12之前的版本),您将看到url是第一个参数,并且不在options对象中

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');
        }
    }
});

@罗里姆克罗桑oups@RoryMcCrossan是的,不用担心。更新的答案。我一定是疯了,我可以发誓我这么做已经很多年了。@Gazillion,可能是你的其他网站使用了更现代的jQuery版本。1.0非常古老。支持原始语法的v1.12于2016年发布。jQuery的哪个版本?在1.12之前,$.post的签名不存在。无法复制:。如果您检查控制台的网络选项卡,您将看到
数据
按原样编码到请求体中。