将 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 数组的值。

我该如何解决这个问题?

391692 次浏览

使用 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-string 解析出对象的情况下(比如在 AJAX 请求中) ,安全的方法是像下面这样使用 JSON.parse(..):

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

在下面的例子中,您有一个 PHP 数组,然后首先通过一个 PHP 数组创建一个 JavaScript 数组:

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

可以使用 json_encode PHP 函数将 PHP 数组传递给 JavaScript。

<?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<jArray.length; i++){
alert(jArray[i]);
}


</script>

两个平台之间的数据传输需要通用的数据格式。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'))))); ?>'))

这就是你问题的答案。答案可能看起来非常复杂。您可以看到一个描述服务器端和客户端 给你之间通信的简单示例

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

将数据发送回客户端应用程序(即 JavaScript)需要转换为 JSON 格式。PHP 有一个内置的函数 JSON _ encode () ,它可以将任何数据转换为 JSON 格式。Json _ encode 函数的输出将是如下所示的字符串。

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

在客户端,Success 函数将获得 JSON 字符串。Javascript 还有 JSON 解析函数 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.
});