2014-02-22 19 views
-2

我正在使用PHP在一个项目中传递一些数据给javascript。在我的PHP我有:为什么json_encoded对象会以javascript中的数组结尾?

<?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它是一个数组。 I .: .:

projects instanceof Array == true 

我有点困惑,为什么这是这种情况。任何人都可以说明情况吗?

+2

要定义数组你在问为什么它是一个数组? – PeeHaa

+0

我认为他的意思是因为关联数组更像对象 - 尽管很多人并不知道JavaScript数组也可以具有非数字键。 –

+0

@BrettZamir更有趣的是,它不是一个关联数组;-) – PeeHaa

回答

2

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

如果你查看你的broswer生成的HTML源代码,你会看到一行:

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

已经呈现,例如:

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

所以尽可能的JavaScript关注该行将projects定义为一个数组(使用[])的对象(使用{})。因此,您已成功使用该格式将从服务器启动的对象数组交换到客户端。

如果你想获得它的JSON格式转换成客户端上的一个变量再次,也许是为了传回莫名其妙的服务器,你可以使用:

+0

@stovroz非常有帮助的解释。谢谢! – fraxture

相关问题