iJared iJared - 7 months ago 22
Javascript Question

JQuery $.ajax() post - data

I am still quite new to JQuery and am having difficulties with using the $.ajax() function. I am attempting to send data to a java servlet for processing. The data will have a variable length and be in key/value pairs. The data I need to send to the server looks something like this:

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


Now the data doesn't need to be formated this way; it is just how I have it now. My $.ajax() function looks like this:

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 dilema 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());


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?

Answer

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.