2011-02-03 3 views
93

Я пытаюсь получить переменную массива PHP в переменной JavaScript.Передайте массив PHP функции JavaScript

Это мой код:

<html> 
    <head> 
     <script type="text/javascript"> 
       function drawChart(row,day,week,month,date) 
       { 
        // Some code... 
       } 
     </script> 
    </head> 

    <body> 
     <?php 
      for($counter = 0; $counter<count($au); $counter++) 
      { 
       switch($au[$counter]->id) 
       { 
        case pageID.'/insights/page_active_users/day': 
         $day[] = $au[$counter]->value; 
        break; 
        case pageID.'/insights/page_active_users/week': 
         $week[] = $au[$counter]->value; 
        break; 
        case pageID.'/insights/page_active_users/month': 
         $month[] = $au[$counter]->value; 
        break; 
       } 
      } 
     ?> 
     <script> 
      drawChart(600/50, '<?php echo $day; ?>', '<?php echo $week; ?>', '<?php echo $month; ?>', '<?php echo createDatesArray(cal_days_in_month(CAL_GREGORIAN, date('m',strtotime('-1 day')), date('Y',strtotime('-1 day')))); ?>'); 
     </script> 
    </body> 
</html> 

Я не могу получить значение массива PHP.

Как исправить эту проблему?

ответ

8

в следующем примере у вас есть массив PHP, то во-первых, создать массив JavaScript с помощью массива PHP:

<script type="javascript"> 
    day = new Array(<?php echo implode(',', $day); ?>); 
    week = new Array(<?php echo implode(',',$week); ?>); 
    month = new Array(<?php echo implode(',',$month); ?>); 

    <!-- Then pass it to the JavaScript function: --> 

    drawChart(<?php echo count($day); ?>, day, week, month); 
</script> 
+0

Какой смысл использовать Ajax при использовании PHP, когда вы можете просто вводить PHP непосредственно в скрипт? – Abdul

+1

Вы не можете выполнить php-код при нажатии кнопки без использования ajax – Black

150

Использование JSON.

В следующем примере $php_variable может быть любой переменной PHP.

<script type="text/javascript"> 
    var obj = <?php echo json_encode($php_variable); ?>; 
</script> 

В вашем коде, вы можете использовать, как в следующем:

drawChart(600/50, <?php echo json_encode($day); ?>, ...) 

В тех случаях, когда вам нужно разобрать объект из JSON-строки (как в запросе AJAX), безопасный способ заключается в использовании JSON.parse(..) как ниже:

var s = "<JSON-String>"; 
var obj = JSON.parse(s); 
+1

Что было бы недостатком простого написания 'var obj = ; '? Не будет ли PHP закодировать объект JSON безопасно таким образом, чтобы он был проанализирован сценарием? – YMMD

+0

Да, это * * путь. Но мое намерение заключалось в том, чтобы передать JSON.parse() 'как один из безопасных способов анализа из строки. Спасибо за указание, я отредактирую свой пост. – SuperSaiyan

+1

var data = ; возвращает ошибку: SyntaxError: Неожиданный токен < –

48

вы можете конвертировать PHP массивов в JavaScript с использованием json_encode РНР() * функция

<?php $phpArray = array(
      0 => "Mon", 
      1 => "Tue", 
      2 => "Wed", 
      3 => "Thu", 
      4 => "Fri", 
      5 => "Sat", 
      6 => "Sun", 

    ) 
?> 

<script type="text/javascript"> 

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

    for(var i=0;i<6;i++){ 
     alert(jArray[i]); 
    } 

</script> 
+0

вы можете помочь? 'permission [1] = 0' php array становится объектом, подобным этому« разрешению »: {" 1 ": [" 0 "]}', а 'permission [0] = 0' остается массивом. –

+0

hey @ shyammakwana.me, возможно, вы сделали вложенный массив, проверьте print_r ($ array) перед json_encode() и посмотрите, как массив сформирован, как и выше, тогда он будет работать нормально. –

+0

Привет @Tarun спасибо за ответ, да мой массив похож на '$ p [1] [0] = 0;' и он дает объект в моем JS, он вложен. как преодолеть это? –

11

Передача данных между двумя платформы требует общего формата данных. JSON - это общий глобальный формат для отправки данных с кросс-платформой.

drawChart(600/50, JSON.parse('<?php echo json_encode($day); ?>'), JSON.parse('<?php echo json_encode($week); ?>'), JSON.parse('<?php echo json_encode($month); ?>'), JSON.parse('<?php echo json_encode(createDatesArray(cal_days_in_month(CAL_GREGORIAN, date('m',strtotime('-1 day')), date('Y',strtotime('-1 day'))))); ?>')) 

Это ответ на ваш вопрос. Ответ может выглядеть очень сложным. Вы можете увидеть простой пример, описывающий связь между серверной и клиентской стороне here

$employee = array(
"employee_id" => 10011, 
    "Name" => "Nathan", 
    "Skills" => 
    array(
      "analyzing", 
      "documentation" => 
      array(
       "desktop", 
       "mobile" 
      ) 
     ) 
); 

преобразования в формат JSON необходимо отправить данные обратно в клиентское приложение т.е. JavaScript. PHP имеет встроенную функцию json_encode(), которая может конвертировать любые данные в формат JSON. Результатом функции json_encode будет строка, подобная этой.

{ 
    "employee_id": 10011, 
    "Name": "Nathan", 
    "Skills": { 
     "0": "analyzing", 
     "documentation": [ 
      "desktop", 
      "mobile" 
     ] 
    } 
} 

На стороне клиента функция успеха получит строку JSON. Javascript также имеет функцию JSON parsing JSON.parse(), которая может преобразовать строку обратно в объект JSON.

$.ajax({ 
     type: 'POST', 
     headers: { 
      "cache-control": "no-cache" 
     }, 
     url: "employee.php", 
     async: false, 
     cache: false, 
     data: { 
      employee_id: 10011 
     }, 
     success: function (jsonString) { 
      var employeeData = JSON.parse(jsonString); // employeeData variable contains employee array. 
    }); 
+0

это сработало для меня, спасибо :) – zachu

+0

Решила трудоемкую проблему для меня. Благодаря! – GDT

+1

слишком плохо, ссылка «здесь» теперь мертва. –

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