我正试图从其他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}]
。怎么做?
答案 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
正确,第二列不可排序。