2012-04-18 29 views
18

我想发送数据到一个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()函数正常工作,因为我确实收到“Save Complete”的提示。我的困境在servlet上。我如何检索数据?我试图用一个HashMap这样的...

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

...但hm原来是空,我猜是指.getParameterMap()没有找到键/值对。我在哪里错了,或者我错过了什么?

+1

你吃过看看哪些数据以及如何将数据发送到服务器?我不认为'myDataVar.toString()'是你想要的。 – 2012-04-18 17:32:38

+0

我正在将数据分析成字符串变量myDataVar,因此可以根据需要配置数据。我这样做,因为我在另一个模块中做了同样的事情,工作正常。但是,该模块中的数据有点不同,我使用的是我认为是GET的JQuery .ajax类型的默认值。 – iJared 2012-04-18 19:44:27

回答

31

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

更新:修正了代码。

+0

只要服务器能够理解字符串,没关系...... – 2012-04-18 20:00:53

+0

我想我在我的一次迭代尝试中尝试过。我在这篇文章中的问题是如何获取服务器端的数据?上面的hashmap语句没有做我需要它们做的事情。 – iJared 2012-04-18 20:10:47

+0

即使长时间使用JSON和jQuery AJAX请求,我今天犯了一个愚蠢的错误,即将“data”参数的值写为字符串而不是对象。直到我看到你的答案时,我才意识到我是这样做的。去证明你可以错过盯着你的问题。感谢您直接慢跑。 – 2014-06-11 03:46:14

0

我不了解Java,但在$ .ajax中,如果按原样传递对象映射(即删除.toStrong()),然后就像任何文章一样访问它。就像我说的,我不知道Java是如何工作的,但是在PHP中,它就像其他任何帖子一样在$_POST阵列中。

0

就目前而言,我将采用与前面所述不同的路线。我改变了我的数据格式化的方式:

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

在我使用getParameterNames服务器端(),将所有的按键为枚举,然后遍历枚举,并把该键和值成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)); 
} 
0

POST命令获取从servlet的价值,你可以采取的办法,通过使用request.getParameter(key)格式将返回所需的值上this post解释。

2

使用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> 

JavaScript逻辑目标上表单ID #frm_details透过后

$(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:[email protected]