2011-06-15 114 views
18

我在php中有對象,每個對象表示一個「item」以及與它相關的所有信息。將PHP對象傳遞給javascript

而當用戶瀏覽頁面時,應將這些對象傳遞給javascript。理想情況下,鏡像相同的結構,所以我可以使用Raphael在我的網站上以單獨的形狀顯示每個項目及其信息。

但是,你如何獲得從PHP到JavaScript的對象?

回答

30

您可以將PHP對象轉換爲數組,然後使用JSON函數對其進行編碼。之後,從JavaScript解碼。下面是一些基本步驟:

  1. Convert PHP的對象陣列。使用json_encode()編碼該PHP數組。使用JSON.parse或者您可以使用jQuery.parseJSON

  2. Pass JSON編碼的數據PHP

  3. 解碼JSON在JavaScript中。

這是一篇有關傳遞JavaScript object to a PHP object的有趣教程。您可能會通過觀看其他特色/相關視頻發現它很有用。

希望這會有所幫助。

+6

'的eval()'是邪惡的。除非你無法提供幫助,否則不要使用它,特別是不要將它用於不可信的數據! – Bobby 2013-06-12 09:56:43

+0

事實上,eval()是一個危險的方法來調用,而且,如果對象很大,處理起來可能會很慢。如果你忽略它的存在會更好,因爲在大多數情況下,如果你需要將它用於真正的目的,那是因爲你有一個架構問題。 – RPDeshaies 2014-02-21 13:43:57

+0

最佳答案!像魅力一樣工作 – 2017-05-27 17:11:01

1

您將使用JSON對PHP對象進行編碼,以便可以通過Javascript訪問它們。具體怎麼做取決於你的應用程序。

爲此,PHP具有json_encode和json_decode函數。

6

我用這個:

<script> 
var js_data = '<?php echo json_encode($php_data); ?>'; 
var js_obj_data = JSON.parse(js_data); 
</script> 

$ php_data可自從簡單數組對象的數組。

13

遲到的答案,但我很驚訝沒有人提到什麼,可以說是部署此功能的「正確」方式。

在您的對象上實現JsonSerializable接口。該接口定義了一個抽象方法,jsonSerialize。該方法應該返回對象的數組表示形式。

當您嘗試在對象上使用json_encode時,將調用jsonSerialize。您可以將此接口視爲特定於本機JSON編碼功能的「神奇方法」,相當於字符串的__toString

把它在行動,你有一個對象,看起來像這樣:

class MyFoo implements JsonSerializable { 
    public $bar = 'hello'; 
    public $baz = 'world'; 

    public function jsonSerialize() { 
     return array(
      'bar'=>$this->bar, 
      'baz'=>$this->baz 
     ); 
    } 
} 

$myFooInstance= new MyFoo(); 
echo json_encode($myFooInstance); // {"bar":"hello","baz":"world"} 

當我在我的項目實施這一時候,我經常在對象toArray方法,它產生的陣列,並我已經jsonSerialize使用它:

public function jsonSerialize() { return $this->toArray(); }

......這樣我也可以使用數組形式的,如果我選擇這樣做。這也是方便的,如果你將實現對象的序列化與__sleep

文檔

+0

可能是最好的方式去做。 – designcise 2014-07-02 00:28:13