0

重複の可能性:
PHP で json リクエストを処理する

以下:

$.ajax({
    type: 'POST',
    url: 'receive-json.php',
    contentType: 'application/json; charset=UTF-8',
    data: '{"phpJSON":' + JSON.stringify(myJSON) + '}',
    success: function(data){},
    dataType: 'json'
});

これを純粋な JSON としてサーバーに送信します。

{"phpJSON":[{"id":"1","user":"foo","colour":"red"},{"id":"2","user":"bar","colour":"green"},{"id":"3","user":"baz","colour":"blue"}]}

しかし、PHPはそれを認識しません。その代わりに、.ajax() 呼び出し ( data: {"phpJSON":' + JSON.stringify(myJSON) + '}) のデータ値の前後から一重引用符を削除して、(文字列ではなく) オブジェクトになり、代わりにこれがサーバーに送信されるようにしました。

phpJSON%5B0%5D%5Bid%5D=1&data%5B0%5D%5Buser%5D=foo&data%5B0%5D%5Bcolour%5D=red&data%5B1%5D%5Bid%5D=2&data%5B1%5D%5Buser%5D=bar&data%5B1%5D%5Bcolour%5D=green&data%5B2%5D%5Bid%5D=3&data%5B2%5D%5Buser%5D=baz&data%5B2%5D%5Bcolour%5D=blue

これは完全に正常に動作します。PHP はそれを認識します$_POST['phpJSON']が、ここで述べたように、これは冗長であり (特に大量のデータを送信する場合)、POST は他のコンテンツ タイプをサポートする必要があるため、必要ありません。これを回避する方法はありますか? PHP は 以外のコンテンツ タイプを受け取ることができますapplication/x-www-form-urlencodedか?

4

2 に答える 2

2

生の投稿データは、で読み取ってfile_get_contents("php://input")から実行できjson_decodeます。phpJSONプロパティを持つオブジェクトでラップする必要はありません。

于 2012-10-16T03:38:35.063 に答える
2

PHPは、あらゆる種類の受信データを処理できます。multipart/form-dataとapplication/x-www-form-urlencodedが組み込まれ、自動的に$_POSTと$_FILESに処理されます。

php:// inputストリームを介して、必要なものを手動で「受信」できます。しかし、それを使用可能な形式に処理するのはあなた次第です。

于 2012-10-16T03:39:44.123 に答える