将 PHP 数组传递给 JavaScript 函数

IT技术 php javascript
2021-02-01 05:30:16

我正在尝试将 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 数组的值。

我该如何解决这个问题?

4个回答

使用 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);
var data = <?php echo json_encode($registos); ?>; 返回错误:SyntaxError: Unexpected token <
2021-03-24 05:30:16
我也收到此错误(意外令牌 <)
2021-04-04 05:30:16
是的,这是的方式。但我的目的是JSON.parse()作为一种安全的方式来解析字符串。谢谢指点,我会编辑我的帖子。
2021-04-06 05:30:16
@RemusRigo & Nuno:猜猜看,您是在 PHP 标签中打开 PHP 标签吗?无论如何,请发布一个新问题。
2021-04-06 05:30:16
简单地写有var obj = <?php echo json_encode($php_variable); ?>;什么缺点PHP 不会以脚本可解析的方式安全地对 JSON 对象进行编码吗?
2021-04-09 05:30:16

您可以使用json_encodePHP 函数将 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>
嘿@shyammakwana.me 您可能已经创建了一个嵌套数组,在 json_encode() 之前检查 print_r($array) 并查看形成的数组是否与上述相同,然后它会正常工作。
2021-03-17 05:30:16
嗨@Tarun,感谢您的回复,是的,我的数组就像$p[1][0] = 0 ;它,它在我的 JS 中提供了对象,它是嵌套的。如何克服这个?
2021-03-18 05:30:16
你能帮我吗? permission[1]=0php数组变成这样的对象"permission":{"1":["0"]},而permission[0]=0仍然是数组。
2021-03-21 05:30:16
这应该是最受好评的,因为这就是 OP 所要求的
2021-04-03 05:30:16

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

需要转换为 JSON 格式才能将数据发送回客户端应用程序,即 JavaScript。PHP 有一个内置函数 json_encode(),可以将任何数据转换为 JSON 格式。json_encode 函数的输出将是这样的字符串。

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

在客户端,成功函数将获取 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.
    });
太糟糕了,“这里”链接现在已经死了。
2021-04-07 05:30:16

在下面的例子中,你有一个 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>
当您可以将 PHP 直接注入脚本时,在使用 PHP 时使用 Ajax 有什么意义?
2021-03-24 05:30:16
如果不使用 ajax,您将无法在单击按钮时执行 php 代码
2021-03-30 05:30:16