0

$ .post APIと同様に、次のようにします。

$.post('http://...', POST_BODY, function(data) {...});

POST_BODY                            GIVES ME
{name:'test'}                        Empty response
{'name':'test'}                      Empty response
{"name":"test"}                      Empty response
'{"name":"test"}'                    stdClass Object([name] => test)
JSON.stringify({"name":"test"})      stdClass Object([name] => test)

例えば

$.post('http://...', {name:'test'}, function(data) {...});

私のphpレスト関数:

function postContact(...) {
    $request = Slim::getInstance()->request();
    $body= json_decode($request->getBody());
    print_r($body);
}

jQuery APIで説明されているオブジェクトリテラルを使用できないのはなぜですか?間違っているのは私のサーバー側ですか、それともクライアント側ですか?

4

2 に答える 2

4

あなたはこれを間違って理解しました。オブジェクト リテラルを渡すと、jQuery はオブジェクトの各プロパティをキーとして取得し、すべての値を文字列に変換し、これをポスト パラメータに変換します。形式はkey1=val1&key2=val2. もちろん、これは JSON ではないため、json_decode黙って失敗します。

于 2012-10-08T16:44:15.250 に答える
3

jQuery は、実際には「オブジェクト リテラル」を PHP スクリプトにポストしません。通常のフォームの投稿と同じように、クエリ文字列に変換され、POST データとして送信されます。

何もする必要はありません。配列json_decodeを読み取ってその値を取得するだけです。$_POST

JSON文字列をPOST本文として送信しているため、最後の2つの例は機能しますが、他の例では標準のクエリ文字列をPOST本文として送信します。

于 2012-10-08T16:44:06.297 に答える