46

I want to send data to a java servlet for processing. The data will have a variable length and be in key/value pairs:

{ A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 }

The data doesn't need to be formated this way, it is just how I have it now.

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

The $.ajax() function works fine as I do get an alert for "Save Complete". My dilemna is on the servlet. How do I retrieve the data? I tried to use a HashMap like this...

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

...but hm turns out to be null which I am guessing means the .getParameterMap() isn't finding the key/value pairs. Where am I going wrong or what am I missing?

iJared
  • 887
  • 3
  • 13
  • 26
  • 1
    Have you had a look at what data and how the data is sent to the server? I don't think `myDataVar.toString()` is what you want. – Felix Kling Apr 18 '12 at 17:32
  • I am concatinating the data into the string variable myDataVar so the data could be configured anyway I want. I have it this way because I did the same thing in another module which works fine. However, the data in that module is a bit different and I am using the default of JQuery .ajax type which I think is GET. – iJared Apr 18 '12 at 19:44

5 Answers5

68

You don't want a string, you really want a JS map of key value pairs. E.g., change:

 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 understands key value pairs like that, it does NOT understand a big string. It passes it simply as a string.

UPDATE: Code fixed.

FeHe
  • 156
  • 8
aquinas
  • 23,318
  • 5
  • 58
  • 81
  • I think I tried that in one of my iteration attempts. My question with this post is how to I get at the data on the server side? The hashmap statements above don't do what I need them to do. – iJared Apr 18 '12 at 20:10
  • Even after a long time working with JSON and jQuery AJAX requests, I made the silly mistake today of writing my value for the "data" parameter as a string rather than an object. I didn't even realise I'd done it that way until I saw your answer. Goes to show you can miss problems that are staring you in the face. Thanks for jogging me straight. – Jason Snelders Jun 11 '14 at 03:46
13

Simple method to sending data using java script and ajex call.

First right your form like this

<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 logic target on form id #frm_details after sumbit

$(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
Harish Verma
  • 548
  • 7
  • 17
2

you can use ajax post as :

 $.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
Er Mayank
  • 1,017
  • 2
  • 16
  • 39
0

For the time being I am going a different route than I previous stated. I changed the way I am formatting the data to:

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

On the server side I am using getParameterNames() to place all the keys into an Enumerator and then iterating over the Enumerator and placing the keys and values into a HashMap. It looks something like this:

Enumeration keys = request.getParameterNames(); 
HashMap map = new HashMap(); 
String key = null; 
while(keys.hasMoreElements()){ 
      key = keys.nextElement().toString(); 
      map.put(key, request.getParameter(key)); 
}
iJared
  • 887
  • 3
  • 13
  • 26
-1

To get the value from the servlet from POST command, you can follow the approach as explained on this post by using request.getParameter(key) format which will return the value you want.

Community
  • 1
  • 1
atjua
  • 541
  • 1
  • 9
  • 18