$ .parseJSON错误:JSON数据的第1行第1列的意外字符

时间:2018-06-03 09:18:47

标签: jquery json string parsing

我使用jQuery构建一个数组,然后将其字符串化,以便通过隐藏的输入元素在PHP中保存:

var dataObject = [];
dataObject.push({
    text: text
});
var dataObjectString = JSON.stringify(dataObject);
$('#data').val(dataObjectString);

在PHP中,我在保存到DB之前将其转换为Base64:

$args['data'] = isset($args['data']) ? base64_encode($args['data']) : '';

对于视图,我从Base64解码并设置字符串:

$this->set('js_data', base64_decode($this->data));

在视图中我将它放在div属性中,然后用jQuery读取它:

<div class="my_class" data-js="'<?php echo h($js_data); ?>'">

<script type="text/javascript" charset="UTF-8">
$(function(){
    $.each($('.my_class[data-js]'), function(index, element){
        var js_data = $(element).attr('data-js');
        init(element, js_data);
    });

    function init(element, js_data) {
        console.log(js_data);
    };
});
</script>

到目前为止,我已经在控制台中打印了字符串。但那只是一个字符串。我需要一个json对象来读取我的初始数组值。所以如果我这样做

$.parseJSON($(element).attr('data-js'));

它抛出一个错误:“SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符”。为什么?我怎么能把字符串转换成json?

1 个答案:

答案 0 :(得分:0)

  

是的,h()htmlspecialchars()

的缩写

htmlspecialchars()将双引号转义为&quot;。这就足够了,将属性值括在一对额外的单引号中是错误的。

这应该有用。

<div class="my_class" data-js="<?php echo h($js_data); ?>">