我正在编写一个 php 脚本,需要将 2D 数组作为 json 加载到 js 变量中。首先,我制作数组,然后使用json_encode将其转换为字符串。然后我运行一点 js 以使它在客户端可访问。这样:
$sBaseData = Filters::$sFilterBaseTypeData;
$sBaseData = str_replace(''r',' ',$sBaseData);
$sBaseData = str_replace(''n',' ',$sBaseData);
$sBaseData = str_replace(''t',' ',$sBaseData);
echo <<<HTML
<script type="text/javascript">
var validation_data = JSON.parse('$sBaseData');
</script>
HTML;
Firefox 在这里抱怨一个意想不到的角色:
var validation_data = JSON.parse('{"enumeration":{"js":"","msg":""},"date":{"js":" var parts = widget.value.split('-'); var d = new Date(parts[0],parts[1],parts[2]); PASS = (d.getDay()>=1); ","msg":"Invalid date. Please Enter a date in the format: YYYY-MM-DD"},"text":{"js":"","msg":"what did you do?"},"integer":{"js":"if (isNaN(widget.value)) { PASS = false; } else { intVal = parseInt(widget.value); PASS = (widget.value == intVal); } ","msg":"Please enter an integer value"},"decimal":{"js":"PASS = isNaN(widget.value); ","msg":"Please enter a number"},"group":{"js":"","msg":""},"dealer":{"js":"","msg":""}}')
我尝试使用 http://jsonlint.com/找出哪个角色有错,但它说这一切都是有效和精彩的。我替换了一些导致问题的字符,还有什么我应该替换的吗?
问题是您在
使用'
引用字符串时在字符串中具有'
。
如果您的 json 字符串有效,则甚至不需要解析它。以下将起作用。
echo <<<HTML
<script type="text/javascript">
var validation_data = {$sBaseData};
</script>
HTML;
呃...
var parts = widget.value.split('-');
将其放在使用单引号的字符串中会破坏它。使用 JSON 编码器输出 JavaScript 文字。
你的JSON是有效的,但在你的js代码中,简单的引号关闭了解析函数的参数。
尝试如下:
"date":{"js":" var parts = widget.value.split(''-'');