2011-02-03 36 views
93

Tôi đang cố gắng để biến một biến mảng PHP thành một biến JavaScript.Vượt qua một mảng PHP đến một hàm JavaScript

Đây là mã của tôi:

<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> 

tôi không thể nhận được giá trị của mảng PHP.

Làm cách nào để khắc phục sự cố này?

Trả lời

8

Trong ví dụ sau bạn có một mảng PHP, sau đó trước hết là tạo ra một mảng JavaScript bằng một mảng 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

điểm của việc sử dụng Ajax khi sử dụng PHP là gì, khi bạn chỉ có thể tiêm PHP trực tiếp vào tập lệnh? – Abdul

+1

Bạn không thể thực thi mã php khi nhấp vào nút mà không cần sử dụng ajax – Black

150

Sử dụng JSON.

Trong ví dụ sau $php_variable có thể là bất kỳ biến PHP nào.

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

Trong code của bạn, bạn có thể sử dụng như sau:

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

Trong trường hợp bạn cần phải phân tích ra một đối tượng từ JSON-string (như trong một yêu cầu AJAX), cách an toàn là sử dụng JSON.parse(..) như dưới đây:

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

Điều gì sẽ là bất lợi khi viết đơn giản 'var obj = ; '? PHP sẽ không mã hóa đối tượng JSON một cách an toàn theo cách nó có thể phân tích cú pháp bởi tập lệnh? – YMMD

+0

Có, đó là * cách *. Nhưng ý định của tôi là đặt qua 'JSON.parse()' như một cách an toàn để phân tích cú pháp từ chuỗi. Cảm ơn bạn đã trỏ, tôi sẽ chỉnh sửa bài đăng của mình. – SuperSaiyan

+1

var data = ; trả về lỗi: SyntaxError: Mã thông báo không mong muốn < –

48

bạn có thể chuyển đổi mảng php vào javascript sử dụng json_encode php() * chức năng

<?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

bạn có thể trợ giúp không? 'permission [1] = 0' mảng php trở thành đối tượng như quyền này" ": {" 1 ": [" 0 "]}', trong khi 'permission [0] = 0' vẫn là Array. –

+0

hey @ shyammakwana.me bạn có thể đã tạo một mảng lồng nhau, kiểm tra print_r ($ array) trước json_encode() và xem nếu mảng được tạo giống như ở trên thì nó sẽ hoạt động tốt. –

+0

Hi @Tarun cảm ơn bạn đã trả lời, có mảng của tôi giống như '$ p [1] [0] = 0;' và nó cho đối tượng trong JS của tôi, nó được lồng vào nhau. làm thế nào để vượt qua điều này? –

11

Truyền dữ liệu giữa hai nền tảng đòi hỏi một định dạng dữ liệu chung. JSON là định dạng chung chung để gửi dữ liệu nền tảng chéo.

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'))))); ?>')) 

Đây là câu trả lời cho câu hỏi của bạn. Câu trả lời có thể trông rất phức tạp. Bạn có thể thấy một ví dụ đơn giản mô tả giao tiếp giữa phía máy chủ và phía khách hàng here

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

chuyển đổi sang định dạng JSON được yêu cầu để gửi dữ liệu trở lại ứng dụng client ví dụ JavaScript. PHP có hàm json_encode() được tích hợp sẵn, có thể chuyển đổi bất kỳ dữ liệu nào sang định dạng JSON. Đầu ra của hàm json_encode sẽ là một chuỗi như thế này.

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

Ở phía máy khách, hàm thành công sẽ nhận được chuỗi JSON. Javascript cũng có hàm phân tích cú pháp JSON.parse() có thể chuyển đổi chuỗi trở lại đối tượng 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

nó làm việc cho tôi, cảm ơn :) – zachu

+0

Giải quyết vấn đề tốn thời gian cho tôi. Cảm ơn! – GDT

+1

quá xấu liên kết "ở đây" hiện đã chết. –

Các vấn đề liên quan