用php生成javascript代码

时间:2018-03-26 02:15:26

标签: javascript php

我想在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();}"
  }

如何删除这些引号?

3 个答案:

答案 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

http://php.net/manual/es/function.nl2br.php

答案 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那样没有它们的多行字符串。