2014-02-14 3 views
1

У меня есть вложенный массив php, хранящийся в переменной $myArray, ниже показано, как выглядит массив (его не полный вывод) после того, как var отправил его в браузер.PHP-массив для JSON - Uncaught SyntaxError: Неожиданный конец ввода

<?php var_dump($myArray); ?> 

Выход:

array (size=4) 
    'id' => string '162' (length=3) 
    'content' => string 'Test content' (length=12) 
    'children' => 
    array (size=16) 
     0 => 
     array (size=4) 
      'id' => string '29208' (length=5) 
      'content' => string 'Test content 1' (length=14) 
      'children' => 
      array (size=3) 
       ... 
     1 => 
     array (size=4) 
      'id' => string '29215' (length=5) 
      'content' => string 'Test content 2' (length=14) 
      'children' => 
      array (size=1) 
       ... 
     2 => 
     array (size=3) 
      'id' => string '29220' (length=5) 
      'content' => string 'Test Content 3' (length=14) 

Чтение переменной массив из JavaScript, как показано ниже:

<script type="text/javascript"> 
var myVar = JSON.parse('<?php json_encode($myArray) ?>'); 
</script> 

Возвращает следующую ошибку в консоли

Uncaught SyntaxError: Unexpected end of input 

При отладке кода я сделал следующее:

Создал новую переменную и сохранил некоторые данные JSON в ней, а затем JSON проанализировал ее на другую переменную, а затем окончательно успокоил вывод и работал нормально.

<script type="text/javascript"> 
var x = '{"id":123,"content":"This is a test content"}'; 
var myVar = JSON.parse(x); 
console.log(myVar); 
</script> 

Выход был объект с этими значениями в консоли:

Object 
    content: "This is a test content" 
    id: 123 

Что я делаю неправильно?

+0

Почему json кодирует и затем анализирует JS? Почему не печатать как есть? Например: 'var myVar = ;' – Rudie

+0

Rudie правильный, вам не нужно разбирать JSON в виде строки при выводе его непосредственно в браузер таким образом. – phpisuber01

+0

Возможный дубликат [Как получить доступ к переменным PHP в JavaScript или jQuery, а не ] (Http://stackoverflow.com/questions/1808108/how-to-access-php-variables-in- javascript-or-jquery-rather-than-php-echo-vari) – user1596138

ответ

6

var myVar = <?php echo json_encode($myArray) ?>; должны это сделать. Нет ' символов не требуется, так как объект JSON может быть прочитан как написано, а не синтаксический анализ не является необходимым, поскольку он выводит непосредственно на страницу вместо того, чтобы дать ему строку

+0

Спасибо. Он работает сейчас. – h4kl0rd

+0

Рад, что я мог бы помочь, хотя я был бы признателен, если бы вы тоже приняли ответ –

3

Вам нужно отследить объект json.

<?php json_encode($myArray) ?> 

в

<?php echo json_encode($myArray) ?> 
+0

Нет, 'JSON.parse' анализирует строку в объект javascript.Если вы выберете одиночные кавычки, вы конвертируете объект Javascript в объект Javascript. По существу в этой форме вам даже не нужен 'JSON.parse', вы можете установить переменную непосредственно из' json_encode'. т. е. «var obj = ; ' – phpisuber01

+0

Я пробовал' var myVar = ' '; 'и' var myVar =' '; 'both return' Uncaught SyntaxError: Неожиданный идентификатор' – h4kl0rd

2

Вот немного сокращенная трюк для вас объяснили here

Вы можете просто сделать <?=$var?>. В основном это сокращение от echo и работает только в том случае, если включен стенографический тег <?.

Таким образом, ответ на ваш вопрос (если сокращенные открытые теги включены), вы можете использовать этот

var myVar = <?=json_encode($myArray)?>; что эквивалентно тому, что @Dar дал вам выше, но менее уродливым.

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