1

jQueryを使用してJSONオブジェクトを作成して送信していますが、org.json.simpleライブラリを使用してAjaxサーブレットで適切に解析する方法がわかりません。

私のjQueryコードは次のとおりです:

var JSONRooms = {"rooms":[]};
       $('div#rooms span.group-item').each(function(index) {
           var $substr = $(this).text().split('(');
           var $name = $substr[0];
           var $capacity = $substr[1].split(')')[0];           
           JSONRooms.rooms.push({"name":$name,"capacity":$capacity});
       });        
       $.ajax({
           type: "POST",
           url: "ParseSecondWizardAsync",          
           data: JSONRooms,        
           success: function() {
               alert("entered success function");
               window.location = "ctt-wizard-3.jsp";
           }
       });

サーブレットで、request.getParameterNames()を使用してコンソールに出力すると、パラメーター名などとして取得されますrooms[0][key]が、JSON配列ルームを解析できません。request.getParameter("rooms")または.getParameterValues("rooms")バリアントによって返されたオブジェクトを解析しようとしましたが、どちらもnull値を返します。

jQueryでJSONデータをフォーマットする方法に何か問題がありますか、それとも欠落しているサーブレットでJSONを解析する方法がありますか?

データの解析方法がわからないため、サーブレットはまだほとんど空ですが、さらにコードを要求してください。

4

1 に答える 1

2

data引数は$.ajax()、リクエストパラメータマップを表すJSオブジェクトを取ります。したがって、フィードするJSオブジェクトはすべてリクエストパラメータに変換されます。JSオブジェクトにプレーンバニラを渡すため、リクエストパラメータマップとして扱われます。代わりに、リクエストパラメータ名の表現によって個々のパラメータにアクセスする必要があります。

String name1 = request.getParameter("rooms[0][name]");
String capacity1 = request.getParameter("rooms[0][capacity]");
String name2 = request.getParameter("rooms[1][name]");
String capacity2 = request.getParameter("rooms[1][capacity]");
// ...

あなたはそれらすべてを方法で見つけることができますHttpServletRequest#getParameterMap()

Map<String, String[]> params = request.getParameterMap();
// ...

次のように、すべてのパラメータを動的に収集することもできます。

for (int i = 0; i < Integer.MAX_VALUE; i++) {
    String name = request.getParameter("rooms[" + i + "][name]");
    if (name == null) break;
    String capacity = request.getParameter("rooms[" + i + "][capacity]");
    // ...
}

JSONパーサーを使用してさらにプロパティに分解できるように実際のJSONオブジェクトとして渡すことが目的の場合は、StringJS / jQueryを使用して送信する前に変換し、data引数を次のように指定する必要があります。

data: { "rooms": roomsAsString }

このようにしrequest.getParameter("rooms")て、任意のJSONAPIを使用して解析できるJSON文字列として利用できます。


具体的な問題とは関係なく$、jQuery以外のオブジェクトにはjQueryで変数プレフィックスを使用しないでください。これにより、JS/jQueryの専門家にとってコードがより混乱します。プレーンなバニラ文字列やプリミティブではなく、実際のjQueryオブジェクトにのみ使用してください。

var $foo = "foo"; // Don't do that. Use var foo instead.
var $foo = $("someselector"); // Okay.
于 2012-07-02T12:52:48.687 に答える