2010-11-24 188 views
0

我的搜索技巧似乎讓我失望了。我有這個php對象,我從一個mysql條目反序列化,並且我想將它作爲參數傳遞給一個javascript函數,因此它可以將該對象與表單中的值進行比較。從我的搜索中收集到的信息,將對象編碼爲json對象已經成功了,但是當我在變量上執行json_encode時,它只會導致{}傳遞一個PHP對象作爲javascript函數的參數

這裏是代碼中的相關片段:

<?php 
$data = new Data(); 
$data = unserialize(base64_decode($rawdata));//Where $rawdata is the data retrieved from the mysql query. 
/* using function such as $data->getName() to retrieve the relevant data */ 
?> 

<form id="myform" action="#" method="post" onsubmit="compareEntry(<?=json_encode($data)?>)"> 

<!-- Different input and select field initialized with the php data --> 

<input type="submit" onclick="compareEntry(<?=json_encode($data)?>)"/> 
</form> 
<!--<?=json_encode($data)?>--> 

我知道PHP的數據正確地從數據庫中檢索,如在表單中的值都是正確初始化。只有在最後的html評論中,我才知道我有一個空的json對象。

這裏是什麼print_r($data)返回(編輯敏感信息)的一個例子:

(
    [m_path:private] => 
    [m_version:private] => REL_54 
    [m_bugs:private] => Array 
*RECURSION* 
    [m_targets:private] => Array 
*RECURSION* 
    [m_symptoms:private] => Array 
*RECURSION* 
    [m_exception:private] => Array 
*RECURSION* 
    [m_instruction:private] => Array 
*RECURSION* 
    [m_sources:private] => Array 
*RECURSION* 
    [m_risks:private] => Array 
*RECURSION* 
    [m_test:private] => Array 
*RECURSION* 
    [m_contact:private] => Array 
*RECURSION* 
) 
1 

難道我做錯了什麼?編碼爲JSON在我的方案中正確的方法?

+1

'print_r($ data)`結果是什麼? – 2010-11-24 10:10:07

+0

@Pekka,我用print_r結果編輯了我的問題。 – Eldros 2010-11-24 10:18:49

回答

0

您的對象僅包含私有屬性,不會由json_encode輸出。

此外,似乎有某種遞歸正在進行,可能意味着每個數組的成員引用對象本身(或類似的東西)。

您將需要公開某些屬性,並且可能還需要修復遞歸問題。

1

JSON是正確的方法。基本上json_encode/json_decode在這種情況下運行良好。如果它返回一個空對象,那麼您嘗試編碼的數據可能有問題。該函數期望數據使用UTF-8,而PHP本身仍然是ISO-8859-1。所以如果你有如果你先用utf8_encode轉換這些特殊字符,可能會有所幫助。

相關問題