2012-01-24 2 views
0

Во-первых, у меня есть поиск Stack Overflow для ответа, но я не нашел решение, которое работает.json_encode не избежит новых строк

Я использую структуру MVC (yii), чтобы сгенерировать некоторые представления и выбросить их в массив. Каждое представление представляет собой карту, и у меня есть массив карт ($ deck), а также массив массивов карт ($ hands, список рук для каждого игрока). Я просто пытаюсь установить переменную javascript на front-end, чтобы сохранить руки, созданные на PHP. В моем представлении стоит отметить несколько строк. На самом деле, мой текущий вид тест состоит только из:

test 
test 

поэтому я использовал json_encode, но это дает мне следующую ошибку, когда я использую $ .parseJSON():

Uncaught SyntaxError: Unexpected token t 

Я читал в другом месте, что требуется (по какой-либо причине) использовать json_encode дважды. Я пробовал это, но это не помогает.

С одной json_encode, выход вторя $hands (с последующим выходом) выглядит довольно здоровым:

[["test\ntest","test\ntest","test\ntest","test\ntest", etc... 

Но когда я не выйти, я получаю синтаксическую ошибку, каждый раз.

Редактировать: Вот пример моего кода. Обратите внимание, что $ cards - это массив HTML, но в моем упрощенном случае, который все еще содержит ошибки, включает только две строки «теста», как упоминалось выше.

$deck = array(); 
    foreach ($cards as $card) { 
     $deck[] = $this->renderPartial('/gamePieces/cardTest', 
       array('card'=>$card), true); 
    } 
    $hands = Cards::handOutCards($deck, $numCards , $numPlayers); 
    $hands = json_encode($hands); 

    echo $hands; exit; 

С помощью JavaScript, я делаю следующее:

var hands = $.parseJSON('<?php echo json_encode($hands); ?>'); 

It ошибки на странице загрузки.

Любая помощь будет оценена!

Спасибо,

ParagonRG

+3

Использование json_encode дважды делает очень мало смысла. – Pointy

+0

Тогда почему бы вам не оставить выход? И почему есть лишняя цитата '' 'перед скобками массива JSON? – mario

+1

Пожалуйста, покажите часть своего фактического кода, включая часть, которая использует' json_encode'. – nnnnnn

ответ

5
var hands = $.parseJSON('<?php echo json_encode($hands); ?>'); 

Это приведет к чему-то вроде:

var hands = $.parseJSON('{"foobar":"baz'"}'); 

Если есть ' символов в закодированной строке, то сломает синтаксис Javascript. Поскольку вы непосредственно вывода JSON в Javacript, просто сделать:

var hands = <?php echo json_encode($hands); ?>; 

JSON синтаксически действительна Javascript. Вам нужно только разобрать его или eval, если вы получите его как строку через AJAX, например. Если вы напрямую генерируете исходный код Javascript, просто вставьте его напрямую.

+0

Спасибо. Это был основной вопрос, который я не получал; задача решена. – Paragon

Смежные вопросы