我想在Datatable上动态生成列定义。列定义是:
"columns": [
{ "data": "id", "orderable": false },
{ "data": "code" },
{ "data": "name" },
{ "data": "created", "render":
function (data) {
var date = new Date(data);
return date.toLocaleString();
}
},
{ "data": "modified", "render":
function (data) {
var date = new Date(data);
return date.toLocaleString();
}
}]
我尝试使用php对象数组生成javascript代码,然后json_encode,如下所示:
$formatted_cols = [];
foreach ($cols as $idx => $col){
$temp = [];
$temp['data'] = $col;
if(in_array($col, array('id', 'actions'))){
$temp['orderable'] = 'false';
}
if(in_array($col, array('created', 'modified'))){
$temp['render'] = "
function (data) {
var date = new Date(data);
return date.toLocaleString();
}
";
}
$formatted_cols[] = $temp;
}
然后我会在代码通常出现的地方执行以下操作:
echo json_encode($formatted_cols);
但代码是这样的:
[
{
"data": "id",
"orderable": "false"
},
{
"data": "code"
},
{
"data": "name"
},
{
"data": "created",
"render": "\r\n function (data) {\r\n var date
= new Date(data);\r\n \r\n return
date.toLocaleString();\r\n }\r\n "
},
{
"data": "modified",
"render": "\r\n function (data) {\r\n var date
= new Date(data);\r\n \r\n return date.toLocaleString();\r\n }\r\n "
}
]
正如你所看到的,有一堆\ r \ n和东西。有人可以帮我拿到想要的输出吗?
提前感谢您提供任何帮助
更新
我删除了换行符,但功能仍在双引号内
{
"data": "modified",
"render": "function (data) {var date = new Date(data);return
date.toLocaleString();}"
}
如何删除这些引号?
答案 0 :(得分:1)
尝试使用// URL encoding
MediaInfo_Config::urlencode ShouldUrlEncode=Config.URLEncode_Get();
if (ShouldUrlEncode==MediaInfo_Config::URLEncode_Guess)
{
if (File_URL.Path.find(' '))
ShouldUrlEncode=MediaInfo_Config::URLEncode_Yes;
}
if (ShouldUrlEncode==MediaInfo_Config::URLEncode_Yes)
File_URL.Path=ZenLib::Format::Http::URL_Encoded_Encode(File_URL.Path);
。它将带走所有\ r和\ n
答案 1 :(得分:0)
删除换行符,如下所示:
{ "data": "created", "render": "function (data) { var date = new Date(data); return date.toLocaleString(); }" },
但是你仍然会留下一个字符串,这不是你应该使用的东西,即使你可以将它转换为JS中的函数。这很难看。即使它有效,在PHP中生成JS也不是很好 - 如果可以,尝试找另一种方法。让PHP只提供数据,如果可能的话,让JS将功能集成到其中。
答案 2 :(得分:0)
\r\n
“stuff”表示回车+换行组合,换句话说换行符。
如果您尝试编码多行字符串,那么您将在JSON数据中获取这些内容。 JSON本身不支持像PHP那样没有它们的多行字符串。