JQuery&AJAX在WordPress中获取数据到php

时间:2018-01-04 作者:missblueberry

我在wordpress中创建了一个自定义表,用于管理每个用户的词汇表列表。此列表在浏览器中显示为表格。我添加了一个按钮,以便用户可以从列表中删除词汇。为此,我使用jquery脚本。我检索用户id和所选词汇表的id,通过ajax将其传递给我的函数。此函数必须删除存储在数据库中的数据。

在我看来,我的变量被很好地传递到函数中,但它不起作用。谁能解释一下我的错误是什么吗?以及如何检查变量是否传递良好。这里是我在“词汇表.js”中的代码

    jQuery(\'#button\').click( function () {

     var vocabulary = jQuery(\'.selected\').children("input").attr("id");
     var user = jQuery(\'#id_user\').attr("name");

        jQuery.ajax({
        url: removeVoca.ajax_url,
        type:\'post\',
        data : {
            action : \'renove_vocabulary\',
            id_vocabulary : vocabulary,
            id_user : user
        },
        success : function(reponse){

          //delete the row
          table.row(\'.selected\').remove().draw( false );
        },
        error: function(xhr){
           //error handling
           console.log("suppression echoué")
        }});

    } );
} );
这里是我对ajax词汇表的看法。php

add_action( \'wp_ajax_renove_vocabulary\', \'renove_vocabulary\' );

function renove_vocabulary() {

$id_user = $_POST[\'user_id\'];
$id_vacabulary = $_POST[\'vocabulary_id\'];


global $wpdb;

$reponse = $wpdb-> delete (\'wp_user_vocabulary\', array (\'vocabulary_id\' => $id_vacabulary , \'user_id\' => $id_user ), array(\'%d\', \'%d\'));


wp_die();

}
我与调试器进行了核对。变量似乎已发送

enter image description here

1 个回复
最合适的回答,由SO网友:Johansson 整理而成

假设您的脚本本地化和其他内容设置正确,那么后端脚本中就存在问题。您的数据格式如下:

data : {
    action : \'renove_vocabulary\',
    id_vocabulary : vocabulary,
    id_user : user
}
但您正在尝试获取以下数据:

$id_user       = $_POST[\'user_id\'];
$id_vacabulary = $_POST[\'vocabulary_id\'];
应更改这2个以匹配上述内容。因此,将其更改为:

$id_user       = $_POST[\'id_user\'];
$id_vacabulary = $_POST[\'id_vocabulary\'];
此外,不要忘记使用nonce,清理输入并进行一些安全检查。我建议完全使用REST-API。

结束

相关推荐

如何使用ADD_ACTION(‘wp_ajax_[action name]’,...)对于特定的带有条件的页面?

在我的插件中,我使用的是wp\\u ajax,当我用如下条件包装init函数调用时,此挂钩不起作用:public function __construct(){ if( isset( $_GET[\"page\"] ) && $_GET[\"page\"] === \'edit-foo\' ){ <-- This line prevents the call \'wp_ajax_foo\' ! add_action( \'admin_init\'