0

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 です。

4

2 に答える 2

1

クエリ文字列を渡すのではなく、jQuery を介してデータを POST することを強くお勧めします。なんで?URL エンコーディングなどを気にする必要がないからです。

これは、javascript/jQuery では次のようになります。明らかに、概念は基本的にどの種類の AJAX 送信メカニズムでも同じです。

$.ajax({
    type: 'POST',
    url: clr_url_base+'storepat.php?',
    contentType: 'application/json',
    dataType: 'json', // if you expect JSON in return
    data: json,  // your JSON string here
    success: // your success handler
    error: // your error handler
});

PHP 側では、フォームでエンコードされたデータを扱っていないため、PHP の生の入力を読み取る必要があります。幸いなことに、これは非常に簡単で、POST データを PHP オブジェクト/配列に変換するのは非常に簡単です。これは次のように簡単です。

$json = file_get_contents('php://input');
$variable = json_decode($json);
于 2013-11-08T20:54:53.400 に答える