JQuery $ .ajax()post – java servlet中的数据

我想将数据发送到java servlet进行处理。 数据的长度可变,并且是键/值对:

{ 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()函数工作正常,因为我收到“保存完成”的警报。 我的困境在servlet上。 如何检索数据? 我试着像这样使用HashMap ……

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

…但是hm结果是null,我猜这意味着.getParameterMap()没有找到键/值对。 我哪里出错或者我错过了什么?

你不想要一个字符串,你真的想要一个关键值对的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理解这样的键值对,它不会理解一个大字符串。 它只是作为一个字符串传递它。

更新:代码已修复。

使用java脚本和ajex调用发送数据的简单方法。

首先,你的forms是这样的

 

在sumbit之后的表单id #frm_details上的javascript逻辑目标

 $(function(){ $("#frm_details").on("submit", function(event) { event.preventDefault(); var formData = { 'email': $('input[name=email]').val() //for get email }; console.log(formData); $.ajax({ url: "/tsmisc/api/subscribe-newsletter", type: "post", data: formData, success: function(d) { alert(d); } }); }); }) General Request URL:https://test.abc Request Method:POST Status Code:200 Remote Address:13.76.33.57:443 From Data email:abc@invalid.ts 

我不知道Java,但是在$ .ajax中,如果按原样传递对象映射,(即删除.toStrong() )然后它就像任何post一样可访问。 就像我说的,我不知道它是如何在Java中工作的,但在PHP中,它就像其他任何post一样位于$_POST数组中。

目前我的路线与前面所说的不同。 我改变了将数据格式化为:

  &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)); } 

要从POST命令获取servlet的值,您可以使用request.getParameter(key)格式按照本文中的说明进行操作, 该格式将返回您想要的值。