【问题标题】:Pass a PHP array to a JavaScript function [duplicate]将PHP数组传递给JavaScript函数[重复]
【发布时间】:2011-06-20 14:54:27
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

    标签: php javascript


    【解决方案1】:

    使用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 obj = &lt;?php echo json_encode($php_variable); ?&gt;;会有什么缺点? PHP 不会以脚本可解析的方式安全地对 JSON 对象进行编码吗?
    • 是的,这就是的方式。但我的意图是将JSON.parse() 作为从字符串解析的一种安全方式。感谢您的指点,我会编辑我的帖子。
    • var data = ;返回错误:SyntaxError: Unexpected token
    • 我也遇到了这个错误(Unexpected token
    • @RemusRigo & Nuno:只是猜测,您是否在 PHP 标签中打开 PHP 标签?无论如何,请发布一个新问题。
    【解决方案2】:

    在下面的例子中你有一个 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 时使用 Ajax 的意义何在,可以直接将 PHP 注入到脚本中?
    • 不使用 ajax 就无法在按钮点击时执行 php 代码
    【解决方案3】:

    您可以使用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>
    

    【讨论】:

    • 你能帮忙吗? permission[1]=0 php 数组变成这样的对象"permission":{"1":["0"]},而permission[0]=0 仍然是数组。
    • 嘿@shyammakwana.me 你可能已经做了一个嵌套数组,检查 json_encode() 之前的 print_r($array) 并查看形成的数组是否与上面相同,然后它会正常工作。跨度>
    • 嗨@Tarun 感谢您的回复,是的,我的数组就像$p[1][0] = 0 ; 它在我的JS 中提供了对象,它是嵌套的。如何克服这个问题?
    • 这应该是最受欢迎的,因为这是 OP 要求的
    【解决方案4】:

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

    【讨论】:

    • 太糟糕了,“这里”链接现在已经失效了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2015-06-02
    • 2012-05-27
    • 2013-03-15
    相关资源
    最近更新 更多