Usando jquery para hacer una POST, ¿cómo suministrar correctamente el parámetro ‘datos’?

Me gustaría hacer una llamada ajax como un POST, irá a mi servlet. Deseo enviar datos parametrizados, como los siguientes:

var mydata = 'param0=some_text&param1=some_more_text'; 

Proporciono esto como el parámetro ‘datos’ de mi llamada jquery ajax (). Entonces, esto debería insertarse en el cuerpo del POST, ¿verdad? (Quiero decir, no anexado a mi url ‘mysite / save’?):

 $.ajax({ url: 'mysite/save', type: 'POST', data: mydata }); 

parece que funciona correctamente En mi servlet, estoy abandonando todos los parámetros recibidos, y veo que todos salen bien:

 private void printParams(HttpServletRequest req) { Enumeration paramNames = req.getParameterNames(); while (paramNames.hasMoreElements()) { // print each param key/val here. } } 

Además, debería codificar en URL mi cadena de datos manualmente antes de usar, ¿verdad? Me gusta:

 var mydata = 'param0=' + urlencode('hi there!'); mydata += '&param1=' + urlencode('blah blah'); mydata += '%param2=' + urlencode('we get it'); 

¡Gracias!

Una forma más fácil es proporcionar la propiedad de data como un objeto, como este:

 $.ajax({ url: 'mysite/save', type: 'POST', data: { param0:'hi there!', param1:'blah blah', param2:'we get it' } }); 

De lo contrario, sí, debería codificarlo, ya que cualquier cosa con un & por ejemplo arruinaría las cosas muy rápidamente. Sin embargo, proporcionarlo como un objeto es un enfoque mucho más claro / más simple, en mi opinión.

También puede espaciarlo y recuperar propiedades de otros lugares en línea, como esta:

 $.ajax({ url: 'mysite/save', type: 'POST', data: { param0: $('#textbox0').val(), param1: $('#textbox1').val(), param2: $('#textbox2').val() } }); 

Editar: Si tiene curiosidad sobre cómo jQuery hace esta encoding internamente, está usando $.param() (que también puede usar directamente) para codificar el objeto en una cadena, llamada aquí , y las agallas aquí .

Si tiene un formulario, también puede hacer var data = jQuery("#myForm").serialize(); que lo pone en una forma que jQuery.ajax puede entender y usar. De lo contrario, use el objeto literal descrito en la respuesta de Nick.

puede esto ayudarte

 function CallPageSync(url, data) { var response; $.ajax({ async: false, url: url, data: data, timeout: 4000, success: function(result) { response = result; }, error: function(XMLHttpRequest, textStatus, errorThrown) { response = "err--" + XMLHttpRequest.status + " -- " + XMLHttpRequest.statusText; } }); return response; } 

y puedes llamarlo así

 response = CallPageSync(checkPageURL, "un=" + username); 

No es necesario que la URL codifique las variables POST. Sin embargo, si está interactuando con una base de datos, querrá asegurarse de que sus variables estén protegidas contra ataques de inyección.

Lo que tienes funcionará, sin embargo, como mencionó Vivin , si se trata de un formulario, entonces la mejor manera de hacerlo es a través de .serialize() .

Utilizo esto MUCHO MÁS para todos mis envíos de formularios (realizados a través de .ajax() ).