Я использую этот простой код для печати массива как структуры JSON.
header('Content-Type: application/json'); echo json_encode($this->data, JSON_PRETTY_PRINT);
Я использую Chrome версии 28.0.1500.95 m. По какой-то нечетной причине вывод завершается в pre-тег символом табуляции (т. Е. \t
) в начале.
JSON, похоже, разбирается хорошо, но я все равно получаю этот символ табуляции, когда данные не отправляются. Как я могу это исправить ?
<pre style="word-wrap: break-word; white-space: pre-wrap;"> { "title": "Node", "items": [ { "label": "Do stuff", "icon": "..\/ui\/images\/icons\/16x16\/icon.png", "action": "dostuff" } ] }</pre>
Изменить: Вот код на стороне jQuery:
$.ajax({ url : "/myproject/getmenu/", type : 'GET', dataType: "json", success : function(data) { //alert(JSON.stringify(data,undefined,2)); if (jQuery.isEmptyObject(data)) { return; } title = data.title; items = data.items; selected.contextPopup({ title : title, items : items }); } });
Вам нужно удалить любой код, добавляющий <pre>
. Это приводит к тому, что ваш ответ недействителен. JSON (пробелы, чтобы отпечатать это не проблема), и, таким образом, jQuery не удается выполнить синтаксический анализ.
Я не мог видеть ничего в документах PHP о ответе JSON, который был обернут в <pre>
но вы могли бы попробовать его без флага. Я также должен проверить, действительно ли тег в вашем ответе. Если вы используете источник просмотра и имеете установленное расширение браузера JSON-pretty-printing, оно может быть добавлено этим расширением и не находиться в фактическом JSON, обрабатываемом вашим кодом JavaScript.
Хм, я искал правильный ответ, но ни один из них не работал. но я пытался сделать так, как следует, и это сработало для меня …
1- Я установил тип контента в application / json
2- Я использовал die(json_encode($this->data))
вместо echo json_encode($this->data)
надеюсь, что это сработает для вас, хотя я думаю, что это слишком поздно: D простите меня за ответ на старый вопрос, который я недавно столкнулся с тем же вопросом