43

処理のためにデータを Java サーブレットに送信したいと考えています。データは可変長で、キーと値のペアになります。

{ A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 }

データはこのようにフォーマットする必要はありません。それは私が今持っている方法です。

var saveData = $.ajax({
      type: "POST",
      url: "someaction.do?action=saveData",
      data: myDataVar.toString(),
      dataType: "text",
      success: function(resultData){
          alert("Save Complete");
      }
});
saveData.error(function() { alert("Something went wrong"); });

「保存完了」のアラートが表示されるため、機能は$.ajax()正常に機能します。私のジレンマはサーブレットにあります。データを取得するにはどうすればよいですか? このような HashMap を使用しようとしました...

HashMap hm = new HashMap();
hm.putAll(request.getParameterMap());

...しかし、キー/値のペアが見つからないことをhm意味すると推測している null であることが判明しました。.getParameterMap()どこが間違っているのか、何が欠けているのでしょうか?

4

5 に答える 5

64

文字列は必要ありません。実際には、キーと値のペアのJSマップが必要です。例:変更:

 data: myDataVar.toString(),

と:

var myKeyVals = { A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 }



var saveData = $.ajax({
      type: 'POST',
      url: "someaction.do?action=saveData",
      data: myKeyVals,
      dataType: "text",
      success: function(resultData) { alert("Save Complete") }
});
saveData.error(function() { alert("Something went wrong"); });

jQueryはそのようなキーと値のペアを理解しますが、大きな文字列は理解しません。単純に文字列として渡します。

更新:コードが修正されました。

于 2012-04-18T17:48:52.273 に答える
0

当分の間、私は以前に述べたものとは別のルートに行きます。データのフォーマット方法を次のように変更しました。

  &A2168=1&A1837=5&A8472=1&A1987=2

サーバー側では、getParameterNames() を使用してすべてのキーを Enumerator に配置し、Enumerator を反復処理してキーと値を HashMap に配置しています。次のようになります。

Enumeration keys = request.getParameterNames(); 
HashMap map = new HashMap(); 
String key = null; 
while(keys.hasMoreElements()){ 
      key = keys.nextElement().toString(); 
      map.put(key, request.getParameter(key)); 
}
于 2012-04-19T02:00:38.190 に答える