使用AJAX/JSON发送复选框状态并保存

时间:2018-02-01 作者:Sin


我相信这项任务其实很简单。我想查询复选框的状态,用$传递它。将和JSON发布到函数,然后保存值。

my-html (relevant part)

<input type="checkbox" id="<?php echo $category->column_handle; ?>" name="<?php echo $category->column_handle; ?>" class="checkbox" <?php if($my_notifications->{$category->column_handle}){echo \'checked="checked"\';} ?> value="1">

my-script

$(\'.checkbox\').change(function(e){
    var parent = $(this).parents(\'.container\');
    $.post({
        dataType: \'json\',
        url: ajax_object.ajaxurl,
        data:{
            \'action\': \'myaction\',
            \'column\': $(this).attr(\'id\'),
            \'check\': $(this).prop(\'checked\')
            }
    }).done(function(data){
        parent.find(\'.title\').text(data.input);
    });
});

my-function

function my_function(){
    global $wpdb;

    $column = esc_attr($_POST[\'column\']);
    $bool = esc_attr($_POST[\'check\']);
    /*$id is correct and sourced elsewhere (I deleted that part)*/
    $wpdb->update(\'my_dataset\',array($column => $bool),array(\'ID\' => $id));

    echo json_encode(array(\'input\' => $bool));

    die();
}

add_action(\'wp_ajax_myaction\',\'my_function\');
的。完成部分用于测试,并正确返回复选框的状态。但它并没有被保存。我已经尝试了很多,例如将状态视为字符串或传递0和1。一切都没有成功。也许你们中的一个可以帮助我。

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

我解决了这个问题。

我尝试了很多东西,似乎跳过了一个有效的变体。

因此,对于任何通过这种方式来的人来说,它都是有效的:

my-script 如问题所述:

\'check\': $(this).prop(\'checked\')
my-function 具体如下:

function my_function(){
global $wpdb;

$column = esc_attr($_POST[\'column\']);
$bool = esc_attr($_POST[\'check\']);
if($bool == \'true\'){$value = true;}else{$value = false;}
$wpdb->update(\'my_dataset\',array($column => $value),array(\'ID\' => $id));

echo json_encode(array(\'input\' => $bool));

die();
}

add_action(\'wp_ajax_myaction\',\'my_function\');
$bool必须像字符串一样对待。

SO网友:Maxim Sarandi

.prop()
方法返回布尔类型。正确或错误。您应该发送选中的值并将其保存到数据库中。在HTML中,获取您的值并将其设置为您的复选框。你有一个例子<input type="checkbox" name="test" class="checkbox" value="checked">. 您应该发送到php$(\'.checkbox\').val(); 然后将选中的属性放在html中。

<?php $checked = \'your var from database\'; ?>
<input type="checkbox" <?php checked(\'checked\', $checked); ?> name="test" class="checkbox" value="checked">
像这样的事情应该行得通。

结束

相关推荐

订阅者对admin-ajax.php的AJAX调用返回主页

我正在调用管理ajax。php在自定义设置中更改前端帖子(CPT广告)(草稿/发布)的状态。这对管理员用户很好。但是,在对订阅服务器和控制台执行相同操作时。记录我得到的响应,返回主页的全部内容(甚至没有错误)。下面是我调用ajaxurl变量的代码:// AJAXURL VAR add_action(\'wp_head\', \'aii_ajaxurl\'); add_action(\'admin_head\', \'aii_ajaxurl\'); function aii_ajax