为什么json_encoded对象最终在javascript中作为数组?

时间:2014-02-22 11:23:32

标签: javascript php json

我正在使用PHP在我正在处理的项目中将一些数据传递给javascript。在我的PHP中我有:

<?php
        $allprojects = $pages->find('projects')->children();
        $transfer = array();
        $i=0;
        foreach ($allprojects as $p) {
            $transfer[] = array(
                'i' => $i,
                'title' => $p->title()->value,
                'url' => $p->url(),
                'thumb' => thumb($p->children()->first()->images()->first(), array('width'=>170))
            );
            $i++;
        }


    ?>
    <script>
    var projects = <?php print json_encode($transfer); ?>
    </script>

如果我尝试使用此变量projects,那么它就是一个数组。即:

projects instanceof Array == true

对于为什么会这样,我有点困惑。有人可以说明这种情况吗?

1 个答案:

答案 0 :(得分:2)

JSON是一种数据交换格式,用于将对象或对象列表表示为字符串。在您的情况下,您使用格式将列表(特别是数组)$transfer[]从运行服务器端的PHP交换到客户端的Javascript。

如果您在浏览器中查看生成的HTML源代码,您将看到以下行:

var projects = <?php print json_encode($transfer); ?>

已被渲染为,例如:

var projects = [{i: 1, title: "Example", url: "www.example.com", thumb: "example.jpg" }];

就JavaScript而言,这一行将projects定义为对象的数组(使用[])(使用{})。因此,您已成功使用该格式将您启动的对象数组从服务器交换到客户端。

如果你想再次将它的JSON格式转换为客户端的变量,也许是为了以某种方式将其传递回服务器,你可以使用:

var projectsJSON = JSON.stringify(projects);