クライアント側で JSON 応答とフォーマットを取得することには利点がありますが、通常の送信と比較してフォーム送信に JSON を使用する利点はありますか?
5 に答える
POST データを扱うときに気になることが 1 つあります。それは無駄な繰り返しです。
たとえば、POST では次のようになります。
partners[]=Apple&partners[]=Microsoft&partners[]=Activision
JSON を送信するときのように、ここで多くの繰り返しがあることが実際にわかります。
{"partners":["Apple","Microsoft","Activision"]}
47 文字に対して 59 文字です。この小さなサンプルでは非常に小さいように見えますが、これらの節約はどんどん増えていく可能性があり、数バイトでもいくらかのデータを節約できます。もちろん、サーバー側でデータの解析が行われるため、違いが均等になりますが、低速の接続 (3G と EDGE を見てください) を処理するときに、これが役立つことがあることがわかりました。
基本的なフォーム送信の明らかな利点は見当たりません。しかし、複雑な構造を処理する場合は、データを整理することの利点に気付くでしょう。
したがって、単純な連絡フォーム(名前、電子メール、メッセージ)がある場合は、通常のフォームに固執しますPOST
。ただし、たとえば、完全なユーザーのCVを送信することを考えてみてください。サーバー側のスクリプトで大量の変数を処理するのは、非常に面倒です。
PHPでJSONを使用する例を次に示します
//Here are the submission data
{
"personalInformation": {
"name": "hey",
"age": "20"
},
"education": {
"entry1": {
"type": "Collage",
"year": "2012"
},
"entry2": {
"type": "Highschool",
"year": "2010"
}
}
}
$CV_Data = json_decode($_POST['json_form'], true);
$CV_Data['personalInformation']['name'];
$CV_Data['personalInformation']['age'];
//Or you can loop
foreach($CV_Data['education'] as $entry){
$entry['type'];
$entry['year'];
}
ご覧のとおり、ここでJSONを使用すると、データの操作がはるかに簡単になります。
私は実際に同じ問題に取り組んでいます。私の使用例では、潜在的に複雑なツリーをサーバーにポストする必要があります。一部のフレームワークは、2 次元配列をフォーム属性としてデコードできます (Spring WebMVC は私が知っているものです)。それでも、これは、ネストされた配列を送信する特定のケースでのみ役立ちます。名前と値のペアの固有の性質により、1 レベル以上の深さのツリーを送信するのには適していません。過去に、URL エンコードされた JSON を属性値として送信するなどのハックを使用しました。
val0=%7B%22name%22%3A%22value%22%7D&val1=something&val2=something+else
ただし、このアプローチは、オブジェクトがより複雑になると、面倒になり、デバッグが難しくなります。さらに、多くのフレームワークは、JSON フォーム ポストをオブジェクトに自動的にマップするツールを提供しています (例: Jackson for Java)。
最終的には、送信するオブジェクトの複雑さに応じて選択します。オブジェクトが 1 レベルの深さに制限されている場合は、そのままの名前と値のペアを使用します。オブジェクトが複雑で、深くネストされたツリーを含む場合は、JSON を使用します。