2016-01-07 2 views
1

Я работаю над личным проектом в течение нескольких дней, все работает красиво, но так как я начал его снова 2 часа назад, у меня возникает следующая проблема:Array от PHP до Javascript null

<html> 
<head> 
    <title>Page Title</title> 
</head> 
<body> 
    <?php 
    $Testarray = array_map('str_getcsv', $content=file('Shows.csv'), array_fill(0,count($content), ";")); 
    foreach($Testarray as $array) 
    { 
    foreach($array as $item) 
    { 
     print($item); 
     print '<br/>'; 
    } 
    } 
    ?> 
    <script type="text/javascript"> 
    var array = <?php echo json_encode($Testarray); ?>; 
    </script> 
</body> 
</html> 

Я очень боюсь спросить, но массив «var» в Javascript равен нулю. $ Testarray заполнен правильно, он печатает правильные значения. Я попытался сделать то же самое с простой строкой, и это работает без проблем.

Я также пробовал var array = new Array(); перед его заполнением. Нет эффекта.

Редактировать после ответа trincot в:

var array = JSON.parse('<?php echo json_encode($Testarray); ?>'); 

дает следующий результат в "Источники" в Chrome:

var array = JSON.parse(' '); 

Так что до сих пор, кажется, не вернуть ничего.

Edit2: var_dump ($ testarray) (Источники в Chrome):

var_dump testarray

Заключительный изменить: Причиной проблемы является значение в XLSX файл я экспортируемые из в файл CSV. У xlsx было значение с символом ô, которое было заменено на в CSV-файле. Это вызвало появление вложенного массива нулей в PHP и заставило все ускориться.

Используя Eric's ответьте на другой вопрос, сохранив файл xlsx как xls, а затем сохраните xls, поскольку CSV сделал трюк.

+0

Вы должны поставить кавычки '' сделать это строка для Javascript, а затем разобрать его, как JSON – trincot

+1

Это возможный дубликат: - [Как я могу заполнить массив javascript со значениями из базы данных с помощью PHP?] (http://stackoverflow.com/questions/1416908/how-can-i-populate-a-javascript-array -с-значения-с-а-database- using-php) –

+0

json_encode() выгружает только json. Было бы ** НЕ ** выплюнуть звонок «json.parse()». это было бы полностью избыточным. 'var foo = JSON.parse (4);' и 'var foo = 4' по существу идентичны. –

ответ

2

Код в порядке. JSON может быть введен таким образом в Javascript, и это ненормально, что он просто выводит пробел.

var_dump вывод, добавленный в вопрос, подтверждает, что на самом деле существует массив в PHP, который не показывает явных причин для этого эффекта. Я предложил отладки это, выводя элемент JSON элемента:

var array = [ 
    <?php 
    foreach($Testarray as $array) { 
     $output = json_encode($array); 
     echo " $output,\n"; 
    } 
    ?> 
    ]; 

Вы сообщили, что первые значения были корректно выводится, но возникла проблема для значения с характером ô. Однако это не является источником проблемы. В хорошей конфигурации, следующий код:

echo json_encode("ô"); 

вернется: \ u00f4

Какой correct unicode number и valid JSON, и не приведет к эффекту вы имеете. Обратите внимание, что в последней ссылке также указано:

Кодировка символов текста JSON всегда является Unicode. UTF-8 - единственная кодировка, которая имеет смысл на проводе, но разрешены UTF-16 и UTF-32.

Проблема, с которой вы столкнулись, действительно связана с кодировкой .

Чтобы решить эту проблему, вы должны убедиться, что данные в кодировке UTF-8 передаются до json_encode. Если вы получите его из файла CSV, убедитесь, что файл сохранен как UTF-8.

выше, вероятно, решить вашу проблему, но это было бы хорошо и следовать W3C инструкции Declaring character encodings in HTML, в том числе (и) эти:

  • Объявить кодировку UTF-8 в вашем HTML, для например, добавив <meta charset="UTF-8"> в раздел head. Также запустите файл с <!DOCTYPE html>;

  • Убедитесь, что ваш файл PHP сохранен в кодировке символов UTF-8. У большинства редакторов есть опция для этого, либо в меню Save As, либо в некотором Предпочтения. Если редактор предлагает выбор, включите Byte Order Mark. Например, notepad ++ предлагает эту возможность в меню Кодирование;

  • Если у вас по-прежнему возникают проблемы, проверьте настройки конфигурации PHP, касающиеся кодировки символов и кодирования HTTP-вывода. Если у вас есть значения, отличные от значения по умолчанию, не указанные в UTF-8, это может быть причиной ваших проблем.

php.ini settings that influence encoding:

mbstring.internal_encoding = UTF-8 
mbstring.http_output   = UTF-8 
+0

Это дает следующий результат в Источниках в Chrome: var array = JSON.parse (''); – Flats

+0

Это означает, что у вас есть проблема с PHP, и переменная '$ Testarray' действительно пуста (пустая или пустая строка, но не массив). У вас есть ошибки чтения CSV-файла?' Echo $ content; 'to проверьте, есть ли что-нибудь прочитанное. – trincot

+0

Вот, где foreach echo находится в скрипте php в верхней части.Массив правильно заполнен и распечатан на странице. – Flats

0

Попробуйте сделать JSON.parse("<?php echo json_encode($Testarray); ?>")