2010-11-24 33 views
0

私の検索スキルが失敗したようです。私は、このPHPオブジェクトを私は、mysqlのエントリからunserialize、私はjavascript関数の引数として渡すので、オブジェクトをフォームの値と比較することができます。私が検索して収集したものから、jsonオブジェクトとしてオブジェクトをエンコードすると、そのトリックが完了していましたが、変数にjson_encodeを実行しているときは、{}という結果になります。javascript関数の引数としてPHPオブジェクトを渡す

は、ここでは、コードの関連するスニペットです:

<?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のデータが正しく、データベースから取得されることを知っています。私は空のjsonオブジェクトを持っていることを最後のhtmlコメントで知りました。私が何か間違ったことを

(
    [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 

行います:ここで

print_r($data)リターンを(機密情報を編集)の例ですか?私のシナリオでは、JSONへのエンコーディングは正しいアプローチですか?

+1

'print_r($ data)'の結果はどうなりますか? –

+0

@Pekka、私はprint_rの結果で私の質問を編集しました。 – Eldros

+0

同じ目的のためにonsubmitとonclickを使用しているのはなぜですか?compareEntry(<?= json_encode($ data)?>) – booota

答えて

0

あなたのオブジェクトには、json_encodeによって出力されないプライベートプロパティのみが含まれています。

また、何らかの再帰が行われているようで、おそらく各配列のメンバがオブジェクト自体(またはそのようなもの)を参照していることを意味します。

プロパティの一部をパブリックにする必要があり、おそらく再帰の問題も修正する必要があります。

+0

プロパティの名前を使用してアクセス可能で変更されないように、私のプライベートプロパティを必要とする場合はどうすればよいですか?フォームを初期化して新しいオブジェクトを作成するために抽出された値を使用する必要がありますか?その場合は、私はそれをPHPオブジェクトにする必要がありますか、または直接JSONオブジェクトを構築することができますか?別の種類の「データコンテナ」ですか? OPの質問をすべて編集する必要がありますか? – Eldros

+0

@Eldros私は別の 'STDClass'オブジェクトを作成し、それに値を加え、' json_encode() 'を作成します。 –

+2

__toString()メソッドについても読んでください。それはあなたの役に立つかもしれません。 PHP.netのリンクhttp://goo.gl/Is3Dl –

1

JSONが正しい方法です。そして、基本的にはjson_encode/json_decodeがうまくいきます。空のオブジェクトが返された場合、エンコードしようとしているデータに問題がある可能性があります。関数はデータがUTF-8であると予想しますが、PHP自体はISO-8859-1です。たとえば、 utf8_encodeでこれらを最初に変換すると、いくつかのフィールドに特殊文字が追加されます。

関連する問題