数据表的aoColumns无法正常工作

时间:2013-08-07 12:52:39

标签: php jquery sorting datatables

我正试图从其他php页面处理aoColumns的值。但后来它没有正确到来,而如果我使用静态值那么它的工作。 我的代码是这样的:  在php页面

$aoColumn = array("null","null","null","{bSortable: false}");
<input type="hidden" name="aoColumn" id="aoColumn" value="' . implode(",",$aoColumn) . '">

在js页面

var aos = $('#aoColumn').val();
 var ao = (aos)?aos.split(","):[];
 $.each(ao,function(i){
 });

并在dataTable声明中:      “aoColumns”:AO

但它不起作用。 请让我知道这个问题。 提前谢谢。

更新

我知道,在我的情况下aoColumns打印["null", "null", "null", "{bSortable: false}"],而它应该是[null,null,null,Object{bSortable=false}]。怎么做?

3 个答案:

答案 0 :(得分:1)

$aoColumn传递给脚本的方式是错误的。你应该把它作为JSON传递 - 如果JSON是在HTML中传输的,那么它也需要正确的HTML编码:

$aoColumn = array(null, null, null, array('bSortable' => false));
echo '<input ... value="' . htmlspecialchars(json_encode($aoColumn)).'">';

然后将其转回$.parseJSON的对象:

var aoColumn = $.parseJSON($('#aoColumn').val());

但是,我不确定你为什么要打扰隐藏的领域。您可以直接将配置传递给JavaScript:

<?php $aoColumn = array(null, null, null, array('bSortable' => false)); ?>

<!-- later on.... -->
<script>
    var aoColumn = <?php echo json_encode($aoColumn); ?>;
</script>

答案 1 :(得分:0)

JSON.parse('[null, null, null, {"bSortable": false}]');

修改您的内爆功能,以便value="[null, null, null, {\"bSortable\": false}]" 然后在JSON.parse()上运行.val()以获取您的设置对象。

答案 2 :(得分:0)

这是一个有趣的:-)你的设置1:1(虽然只有3列):

<?
$aoColumn = array("null", "{bSortable: false}", "null");
echo '<input type="hidden" name="aoColumn" id="aoColumn" value="' . implode(",",$aoColumn) . '">';
?>

JS

var ao = [];
var aos = $('#aoColumn').val().split(',');
for (var i=0;i<aos.length;i++) {
    if (aos[i]=='null') {
        //no need for processing
        ao.push('{ null }');
    } else {
        //remove {, } and whitespace, return array splitted by :
        var s = aos[i].replace('{','').replace('}','').replace(' ','').split(':');
        //create object
        var o = {};
        //here you need to force a real boolean instead of "false"
        o[s[0].toString()]=(s[1]=="false") ? false : true;
        ao.push(o);
    }
}

$('#table').dataTable({
    "aoColumns": ao
});

中提琴。数据表解析ao正确,第二列不可排序。