2013-08-07 29 views
2

我想從其他php頁面處理aoColumns的值。但是,它不是很好,而如果我使用靜態值,那麼它的工作。 我的代碼是這樣的:在 PHP頁面aColumns的數據表不能正常工作

$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

但它無法正常工作。 請讓我知道這個問題。 在此先感謝。

UPDATE

我知道,在我的情況aoColumns打印["null", "null", "null", "{bSortable: false}"],而應該是[null,null,null,Object{bSortable=false}]。怎麼做?

回答

0

這是一個有趣的:-)採取您的設置1:(雖然只是3列)1:

<? 
$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 
}); 

中提琴。 Datatables正確解析ao,第二列不可排序。

+1

非常感謝davidkonrad。其實我想爲aoColumns設置一個動態值。現在它按我的預期正常工作。再次感謝。 – Mausumi

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

修改您的破滅功能,使您的value="[null, null, null, {\"bSortable\": false}]" ,然後運行在.val()JSON.parse()讓你設置對象。

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> 
+0

很好的答案,但它不是一個完全不同的方法?如果Mausumi不能夠/允許更改PHP腳本呢? – davidkonrad

+0

@davidkonrad:那麼他們應該說有特定的限制。雖然我懷疑是這樣,因爲問題說「我的代碼就像......」。 – Jon

+0

沒錯,但正如你所看到的 - 有時候我們想要的只是一個答案,而不是一場講座 – davidkonrad