Javascript でオブジェクトを作成し、引数として PHP スクリプトに渡します。
var pattern = new Object();
pattern['@id'] = '';
pattern['@num'] = '';
pattern.cprop = new Object();
//pattern.aprop = new Object();
pattern['@id'] = id;
pattern['@num'] = pn;
pattern.cprop.$ = pb.find('input[name="subject"]').val() || '';
var json = {'pattern': pattern};
私のAjax呼び出しは
url: clr_url_base+'storepat.php?data='+encodeURIComponent($.toJSON(json))
私のPHPスクリプトでは、
$pat = json_decode(str_replace ('\"','"', $data), true);
$prep = $pat["pattern"]["@id"];
$sense = $pat["pattern"]["@num"];
$cprop = $pat["pattern"]["cprop"]["$"];
//$aprop = $pat["pattern"]["aprop"]["$"];
これは機能しますが、aprop値を追加すると機能しなくなります。すべての値は文字列です。何がうまくいかないかについての提案。
2 つの JSON 文字列を次に示します。
{\"pattern\":{\"@id\":\"against\",\"@num\":\"1(1)\",\"cprop\":{\"$\":\"a person or thing (often abstract) opposed\"}}}
{\"pattern\":{\"@id\":\"against\",\"@num\":\"1(1)\",\"cprop\":{\"$\":\"a person or thing (often abstract) opposed\"},\"aprop\":{\"$\":\"verbs (to which \'against\' introduces idea of opposition); nouns denoting conflict\"}}}
1 つ目はcpropの値のみを持ち、2 つ目はapropの値を追加します。apropには一重引用符があることに注意してください。Javascript でエンコードし、PHP でデコードする必要があると思われるのは、この種のデータです。2つ目の爆弾。フォームから約 20 個のフィールドがあるため、 patternのフィールドとしてではなく、手動で JSON を作成するのは非常に複雑になります。2 番目の爆弾の場合、$patの値は NULL です。