我想将数据发送到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()
没有找到键/值对。我哪里出错或者我错过了什么?
答案 0 :(得分:48)
你不想要一个字符串,你真的想要一个关键值对的JS映射。例如,改变:
data: myDataVar.toString(),
with:
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理解这样的键值对,它不会理解大字符串。它只是作为一个字符串传递它。
更新:代码已修复。
答案 1 :(得分:5)
使用java脚本和ajex调用发送数据的简单方法。
首先右键你的表格
<form id="frm_details" method="post" name="frm_details">
<input id="email" name="email" placeholder="Your Email id" type="text" />
<button class="subscribe-box__btn" type="submit">Need Assistance</button>
</form>
在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
答案 2 :(得分:0)
我不知道Java,但在$ .ajax中,如果按原样传递对象图,(即删除.toStrong()
)然后它就像任何帖子一样可访问。就像我说的那样,我不知道它在Java中是如何工作的,但在PHP中,它只是在$_POST
数组中,就像任何其他帖子一样。
答案 3 :(得分: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));
}
答案 4 :(得分:0)
要从POST
命令获取servlet中的值,您可以按照this post中的说明使用request.getParameter(key)
格式,然后返回您想要的值。
答案 5 :(得分:0)
您可以将 ajax 帖子用作:
$.ajax({
url: "url",
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ name: 'value1', email: 'value2' }),
success: function (result) {
// when call is sucessfull
},
error: function (err) {
// check the err for error details
}
}); // ajax call closing