2014-05-08 2 views
0

Итак, я знаю, что это было задано раньше, и я пробовал решения, но по какой-то причине они не работают для меня, поэтому я прошу помощи. Я не использовал JSON еще так может быть, это что-то глупо, но я понятия не имею, ...Передача PHP-массивов в javascript с помощью JSON

Вот код:

<?php 
    $array; 

    #successful attempt to display array with json_encode in php 
    echo json_encode($array); 
?> 
<html> 
<input id="show" type="button" onclick="showArray()" value="showArray"> 
<divShow> 
</divShow> 
<script> 
function showArray(){ 
var array = <?php echo json_encode($array); ?>; 

    //Failed attempt to display array in the div field show 
    document.getElementById("divShow").appendChild(array); 

    //Failed attempt to display the array with an alert. 
    for(var i=0; i<2; i++){ 
     alert(array[i]); 
    } 
}; 
</script> 
</html> 

Так что же вы думаете, ребята? Я что-то упускаю? Возможно ли, что массив был успешно передан javascript, но по какой-то причине не будет отображаться?

Спасибо,

для -Alex-

EDIT:

Так я получаю серию массивов из текстового файла. Я использую эти массивы как строки для отображения на странице, а затем преобразую их в массивы с плавающей запятой. Когда я повторяю один из поплавков массивов, таких как $ Z_Ausmass с:

echo json_encode($Z_Ausmass); 

Я получаю [25.39999961853,121.48651123047]. Однако, когда я использую следующее для отображения массива через javascript:

function calc(){ 
var Z_Ausmass = <?php echo json_encode($Z_Ausmass); ?>; 
    for(var o=0; o<Z_Ausmass.length; o++){ 
    var textnode = document.createTextNode(Z_Ausmass[o]); 
    document.getElementById("divCalc").appendChild(textnode); 
    } 
}; 

не работает. Очень важно получить массивы с плавающей запятой в скрипте, потому что сценарий должен выполнять вычисления на их основе, а затем отображать вычисления для пользователя.

+0

Есть ли сообщение, отображаемое в консоли браузера? –

+0

Используйте 'console.log' для отладки. Это гораздо более полезно. Попробуйте выполнить 'console.log (array);' сразу после того, как вы назначаете 'array', и проверьте консоль браузера (нажмите F12 в Chrome). Вы также можете проверить исходный код и посмотреть, есть ли какие-либо (непонятные) ошибки, которые вы выбрали для вашего скрипта. – Paulpro

+0

Хорошо, я посмотрел в Chrome и Firefox, и это появилось в Firefox: символьная кодировка HTML-документа не была объявлена. Документ будет отображаться с искаженным текстом в некоторых конфигурациях браузера, если документ содержит символы вне диапазона US-ASCII. Символьная кодировка страницы должна быть объявлена ​​в документе или в протоколе передачи. –

ответ

2

Когда я выполняю код, он работает нормально.

Первая попытка не удалась, потому что вы не можете добавить полный массив. Вам нужно добавить каждый элемент в массив отдельно.

Вторая попытка работает правильно. Вам нужно только удалить первую попытку сделать ее работу, потому что первая попытка останавливает выполнение javascript.

редактировать

Я попытался исправить код для вас. Я использовал простой массив только с текстом. элемент вы хотите, чтобы показать в не имеют идентификатор вы где ссылающийся на

<divShow></divShow>//wrong 
<div id="divShow"></div>//right 

в цикле корыта полный массив вы не хотите жестко закодировать максимальное # элементов использовать arr.length, как максимум для «for'-петли.

Вы не можете напрямую добавить сырой текст в элемент html. Вам нужно сделать TextNode, а затем добавить этот узел в элемент html.

var textnode=document.createTextNode(arr[i]); 
document.getElementById("divShow").appendChild(textnode); 

Так рабочий код будет выглядеть примерно так:

<?php 
$array = array("test","text","show"); 

#successful attempt to display array with json_encode in php 
echo json_encode($array); 
?> 
<html> 
<input id="show" type="button" onclick="showArray()" value="showArray"> 
<div id="divShow"> 
</div> 
<script> 
    function showArray(){ 
     var arr = <?php echo json_encode($array); ?>; 

     //Put the text in a text node, append to the div 
     for(var i=0; i< arr.length; i++){ 
      var textnode=document.createTextNode(arr[i]); 
      document.getElementById("divShow").appendChild(textnode); 
     } 
    }; 
</script> 
</html> 
+0

Это работало без JSON.parse(), которые предложили другие? –

+0

Я прокомментировал первую попытку, но второй все еще не работает ... –

+0

Мне не нужно загружать пакеты или что-то еще? –

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