0

我知道这个问题是重复的,但我真的想要一些帮助。我知道将 php 数组发送到 js 的唯一方法是使用 json 编码。好吧,我试过了,但没有任何效果。这是我的代码:

<?php

Header("content-type: application/x-javascript");
error_reporting(E_ERROR | E_WARNING | E_PARSE);

    $months = Array();

    $months = ['January'=>array(), 'February'=>array(), 'March'=>array(), 'April'=>array(), 'May'=>array(), 'June'=>array(), 'July'=>array(), 'August'=>array(), 'September'=>array(), 
                        'October'=>array(), 'November'=>array(), 'December'=>array() ]; 



    // Connect to MySQL
         if ( !( $database = mysql_connect( "localhost",
            "root", "" ) ) )                      
            die( "Could not connect to database </body></html>" );

    // open Events database
         if ( !mysql_select_db( "Events", $database ) )
            die( "Could not open Events database </body></html>" );

            foreach($months as $month => $arr) {

            $result = mysql_query("SELECT * FROM posted_events WHERE Month_ = '$month' ") 
                    or die ('Error updating database because: '.mysql_error());

            while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $months[$month][] =  $row['DayNum']; 

    }
}

            echo "var months = jQuery.parseJSON('$months');";
<?php

所以 JS 数组变量“months”应该包含 PHP 数组变量中的所有元素,对吧?好吧,它不起作用。我不知道怎么了。请帮忙?我需要在我的外部 JS 文件中使用这个数组来对我的程序做更多的工作,所以它真的很重要。多谢你们。

4

1 回答 1

1

您需要使用 PHP 对 JSON 数据进行编码。这可以使用json_encode(). 编码后,您可以将变量传递给 Javascript,如下所示:

$months = json_encode($months);
echo "var months = $months ;";

此外,您当前正在使用jQuery.parseJSON. 但是,jQuery文档说:

JSON 标准不允许“控制字符”,例如制表符或换行符。像这样的示例$.parseJSON('{"testing":"1\t2\n3"}')在大多数实现中都会抛出错误,因为 JavaScript 解析器将字符串的制表符和换行符转义为文字制表符和换行符;将反斜杠加倍会1\\t2\\n3产生预期的结果。从服务器端语言(如 PHP)将 JSON 注入 JavaScript 文件时,经常会出现此问题。

改为使用JSON.parse()

json = JSON.parse(months);
for(var i in json) {

//code

}

大多数浏览器都支持这一点,但对于那些不支持的,您可以使用json2.js.

希望这可以帮助!

于 2013-08-13T15:09:05.207 回答