【问题标题】:JQuery $.ajax() post - data in a java servletJQuery $.ajax() post - java servlet 中的数据
【发布时间】:2023-03-25 04:55:01
【问题描述】:

我想将数据发送到 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() 没有找到键/值对。我哪里错了或者我错过了什么?

【问题讨论】:

  • 你看过哪些数据以及数据是如何发送到服务器的吗?我不认为myDataVar.toString() 是你想要的。
  • 我将数据连接到字符串变量 myDataVar 中,因此可以根据需要配置数据。我之所以这样,是因为我在另一个工作正常的模块中做了同样的事情。但是,该模块中的数据有点不同,我使用的是默认的 JQuery .ajax 类型,我认为它是 GET。

标签: javascript jquery ajax hashmap


【解决方案1】:

你不想要一个字符串,你真的想要一个键值对的 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 语句没有做我需要他们做的事情。
  • 即使在长时间处理 JSON 和 jQuery AJAX 请求之后,我今天还是犯了一个愚蠢的错误,将“data”参数的值写为字符串而不是对象。在看到你的回答之前,我什至没有意识到我是这样做的。去表明你可能会错过那些盯着你的问题。谢谢你让我直接慢跑。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    要通过POST 命令从 servlet 中获取值,您可以按照this post 中解释的方法使用request.getParameter(key) 格式,这将返回您想要的值。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多