2013-09-17 3 views
-1

У меня есть json_encoded PHP массив, который я хочу передать в Javascript:Не удается передать PHP массив Javascript

$unmatched = json_encode(compareCourseNum($GLOBALS['parsed_courseDetails'], get_course_num_array($GLOBALS['bulletin_text']))); 

$GLOBALS['unmatched'] = $unmatched; 

print "<center><strong>Total number of courses parsed: $number_of_courses/" . "<span onClick=\"show_array(<?php echo $unmatched; ?>);\">" . count_courses($GLOBALS['bulletin_text']) . "</span>" . "</strong></center>"; 

Тем не менее, когда я запускаю сценарий, что напечатано на это:

Total number of courses parsed: 98/);">108 

И Javascript тоже не работает. Что должно быть напечатано это:

Total number of courses parsed: 98/108 

И Javascript должен работать, когда я нажимаю на «108», показывая предупреждение элементов массива.

Как это исправить?

Вот Javascript:

function show_array (array) { 

    //var array = <?php echo $unmatched; ?>; 
    alert(); 
    var result = "", 
     length = array.length; 
    for (var i = 0; i < length; ++i) { 
     result += array[i] + "\n"; 
    } 
    alert(result); 
} 

UPDATE: Я удалил PHP-теги и точка с запятой, так что теперь

"<span onClick="show_array($unmatched);">" 

Но show_array до сих пор не работает! Когда я смотрю на Источник страницы, я вижу следующее:

"<span onClick="show_array(["220","221","242E","249B","250","254","255","256","256S","272A","285"]);">" 

Помогите пожалуйста? Я знаю, что это не что-то не так с кодом show_array, но с массивом ввода, потому что, когда я передаю числовой массив, как [133, 234, 424], он работает, но не со строковыми.

UPDATE2:

Хорошо, я сумел сделать работу Javascript, заменив двойные кавычки в json_encoded массиве с одинарными кавычками:

$unmatched = str_replace('"', '\'', $unmatched); 

Но я не понимаю, почему мне нужно сделать что.

+1

РНР массив не является Java-массив. Вы должны рассмотреть возможность изменения вашего события show_array() 'onclick, чтобы включить' json_encode() '. – Lance

+0

Я использовал json_encode, когда я определил $ unmatched. –

+0

Я верю var name1 = val1, name2 = val2 ...; это правильный синтаксис. http://stackoverflow.com/questions/694102/declaring-multiple-variables-in-javascript –

ответ

1

Вы можете попробовать использовать JSON_NUMERIC_CHECK в качестве второго параметра в json_encode() (Требуется PHP> = 5.3.3).

Другой вариант заключается в использовании parseInt() в JavaScript:

result += parseInt(array[i], 10); 
1

Этот

...onClick=\"show_array(<?php echo $unmatched; ?>);\">" . count_courses($GLOBALS['bulletin_text']) . "</span>" . "</strong></center>"; 

должен быть

...onClick='show_array($unmatched);'>" . count_courses($GLOBALS['bulletin_text']) . "</span>" . "</strong></center>"; 

что удалить открытия PHP теги закрытия и точка с запятой, вы уже в режиме PHP разбора.

+0

I попробовал это, но я до сих пор не получаю предупреждающее сообщение, когда я нажимаю «108», то есть show_array() не работает. Вот этот диапазон в источнике страницы после этой модификации: « " –

+0

@GaryGreenhorn замечает одинарные кавычки вокруг show_array, если вы хотите использовать' '', тогда вам также нужно будет кодировать json и json. – Musa

+0

А, я не видел одиночные кавычки. Теперь это работает! –

0

Ниже приведено два важных раздела. Первый показывает минимальную php и, главным образом, буквальную разметку. Вторая имеет php-обертку вокруг всего содержимого первого.

Я заменил некоторый код литералами для простоты.

<html> 
    <head> 
    <script> 
     function show_array (array) { 
     var result = "", 
     length = array.length; 
     for (var i = 0; i < length; ++i) { 
      result += array[i] + "\n"; 
     } 
     alert(result); 
     } 
    </script> 
    </head> 
    <body> 
    <?php $unmatched = json_encode(array(1,2,3,4,5)); ?> 

    <!-- Minimal php, only to pass the php array to JavaScript. --> 
    <center><strong> 
     Total number of courses parsed: 
     <span onClick="show_array(<?php echo $unmatched ?>)"> 
     15 
     </span> 
    </strong></center> 

    <!-- Wrapper in php. 
     1. Wrap the previous markup in an echo. 
     2. Escape the double quotes. 
     3. Remove the php stuff around $unmatched. 
     4. Profit. 
    --> 
    <?php echo " 
    <center><strong> 
     Total number of courses parsed: 
     <span onClick=\"show_array($unmatched)\"> 
     15 
     </span> 
    </strong></center> 
    "; ?> 

    </body> 
</html> 
Смежные вопросы