2

我正在尝试处理来自其他 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}]. 怎么做?

4

3 回答 3

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>
于 2013-08-07T14:34:38.987 回答
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正确,第二列不可排序。

于 2013-08-07T15:01:21.290 回答
0
JSON.parse('[null, null, null, {"bSortable": false}]');

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

于 2013-08-07T14:33:00.980 回答