1

我正在尝试将复选框与 Ajax 一起使用。如果没有 Ajax,我可以处理它。这是我的 Jquery 代码

$("#skillcat").click(function(e) {
    var submit_val = new Array();
    e.preventDefault();
     var ids = $('check_subjects input:checked')
           .map(function(){
             return this.value;
           }).get();

    $.ajax( {
    type : "POST",
    dataType : "json",
    url : "./wp-admin/admin-ajax.php",
    data : {
        action : 'each_category',
        check_subjects : ids
    },
    success : function(data) {
        alert(data);

        $('#accordion').html(data);


    }
    });
});

这是我的 php 代码,其中在服务器端生成按钮和复选框

foreach($subjects as $key=> $data){     
echo '<input type="checkbox" id="'. $data->id .'" value="'. $data->id .'" name="check_subjects[]">&nbsp;&nbsp;  '. $data->subject .'<br>';
}

我用来从 Post 数组中捕获数据的服务器端

if(isset($_POST['check_subjects'])){
    //var_dump(check_subjects);
    $check_subjects  = implode(',', $_POST['check_subjects']);
    //echo '$check_subjects&nbsp;&nbsp;&nbsp;&nbsp;'. $check_subjects;
}

但是,当我运行上面的代码时,我注意到一些数据被发送到服务器(通过 chrom 开发工具)。但我在警报框中得到空值。我猜响应是空的,因为数据没有正确发送到服务器。我不确定用于将请求传递给 Ajax 的 javasript 代码。

谁能解释我在哪里做错了?

4

2 回答 2

2

它期待 JSON 并且您正在返回 html。所以让 dataType HTML 或 json 编码你的回报......

于 2013-07-22T08:45:47.353 回答
0

试试这个:

$("#skillcat").on('click', function (e) {
    e.preventDefault();

    var ids = [];
    var $el = $('[name*=check_subjects]:checked'); //Get all checked Checkboxes
    $el.each(function () {
        ids.push($(this).attr('id')); //get the Id from each checkbox
    });

    $.ajax({
        type: "POST",
        dataType: "html",
        url : "./wp-admin/admin-ajax.php",
        data: {
            action: 'each_category',
            check_subjects: ids
        },
        success: function (data) {
            alert(data);
            $('#accordion').html(data);
        }
    });
});
于 2013-07-22T08:46:00.810 回答