Ошибка $ .parseJSON: неожиданный символ в строке 1 столбца 1 данных JSON - PullRequest
0 голосов
/ 03 июня 2018

Я создаю массив с помощью jQuery, затем преобразую его в строку для сохранения в БД с помощью PHP через скрытый элемент ввода:

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

В PHP я преобразую его в 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: неожиданный символ в строке 1 столбца 1 данных JSON».Зачем?Как еще можно преобразовать строку в json?

1 Ответ

0 голосов
/ 03 июня 2018

да, h() - это сокращение от htmlspecialchars()

htmlspecialchars(), экранирующее двойные кавычки как &quot;.Этого достаточно, неправильно заключать значение атрибута в дополнительную пару одинарных кавычек.

Это должно работать.

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