2012-04-18 26 views
18

Deseo enviar datos a un servlet java para su procesamiento. Los datos tienen una longitud variable y estar en pares clave/valor:

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

Los datos no necesita ser formateada esta manera, es lo que tengo ahora.

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

La función $.ajax() funciona bien como yo obtener una alerta para "Save Complete". Mi dilema está en el servlet. ¿Cómo recupero los datos? He intentado utilizar un HashMap como esto ...

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

... pero hm resulta ser nula que estoy significa que el .getParameterMap() no es encontrar los pares clave/valor adivinando. ¿Dónde estoy equivocado o qué me estoy perdiendo?

+1

¿Ha tenido un vistazo a lo que los datos y cómo se envían los datos al servidor ? No creo que 'myDataVar.toString()' sea lo que quieras. –

+0

Estoy concatenando los datos en la variable de cadena myDataVar para que los datos puedan configurarse de todos modos que yo quiera. Lo tengo así porque hice lo mismo en otro módulo que funciona bien.Sin embargo, los datos en ese módulo son un poco diferentes y estoy usando el tipo JQuery .ajax predeterminado, que creo que es GET. – iJared

Respuesta

31

No desea una cadena, realmente desea un mapa JS de pares de valores clave. Por ejemplo, cambiar:

data: myDataVar.toString(), 

con:

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 entiende pares de valores clave como eso, no entiende una cadena grande. Lo pasa simplemente como una cadena.

ACTUALIZACIÓN: Código fijo.

+0

Mientras el servidor entienda la cadena, está bien ... –

+0

Creo que lo intenté en uno de mis intentos de iteración. Mi pregunta con esta publicación es ¿cómo puedo obtener los datos en el lado del servidor? Las declaraciones de hashmap anteriores no hacen lo que necesito que hagan. – iJared

+0

Incluso después de mucho tiempo trabajando con las solicitudes JSON y jQuery AJAX, cometí hoy el tonto error de escribir mi valor para el parámetro "datos" como una cadena en lugar de como un objeto. Ni siquiera me di cuenta de que lo había hecho de esa manera hasta que vi tu respuesta. Va a mostrar que puedes perderte los problemas que te están mirando a la cara. Gracias por correrme derecho. –

0

No sé acerca de Java, pero en $ .ajax, si pasa el mapa de objetos tal como está, (es decir, elimina .toStrong()) y luego está accesible como cualquier publicación. Como dije, no sé cómo funciona eso en Java, pero en PHP, simplemente está en la matriz $_POST como en cualquier otra publicación.

0

Por el momento voy por una ruta diferente a la que mencioné anteriormente. He cambiado la forma en que estoy formatear los datos a:

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

En el lado del servidor que estoy usando getParameterNames() para colocar todas las llaves en un enumerador y luego iterar sobre el enumerador y la colocación de las claves y valores en una HashMap. Se ve algo como esto:

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

para obtener el valor del servlet desde POST de comandos, se puede seguir el planteamiento expuesto en this post utilizando request.getParameter(key) formato que devolverá el valor que desee.

2

Método simple para enviar datos mediante el script java y la llamada ajex.

En primer lugar el derecho de su forma como esto

<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 objetivo lógico en forma #frm_details id después complete

$(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] 
Cuestiones relacionadas