JQuery $.ajax() 在 Java servlet 中发布数据

IT技术 javascript jquery ajax hashmap
2021-02-23 22:17:12

我想将数据发送到 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结果是空的,我猜这意味着.getParameterMap()没有找到键/值对。我哪里出错了或者我错过了什么?

5个回答

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

更新:代码已修复。

我想我在我的一次迭代尝试中尝试过。我对这篇文章的问题是如何获取服务器端的数据?上面的 hashmap 语句没有做我需要它们做的事情。
2021-04-28 22:17:12
即使在长时间处理 JSON 和 jQuery AJAX 请求之后,我今天也犯了一个愚蠢的错误,将“数据”参数的值写为字符串而不是对象。在看到你的回答之前,我什至没有意识到我已经这样做了。去表明你可能会错过正盯着你看的问题。谢谢你让我直接慢跑。
2021-05-20 22:17:12

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

首先像这样正确你的表格

<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

目前,我走的路线与我之前所说的不同。我将格式化数据的方式更改为:

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

您可以将 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

要获得从servlet中值POST命令,你可以采取的办法是在解释这个职位通过request.getParameter(key)将返回所需的值格式。