2014-02-22 55 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

相關問題