2011-04-08 18 views
9

estoy usando el comando jQuery $ post .ajax para invocar un evento ajax en mi servidor web:

var formParams = "fe1=y&fe2=m&fe3=m"; 

$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: formParams, 
    complete: function(xmlRequestObject, successString){ 
     ymmReceiveAjaxResponse(xmlRequestObject, successString); 
    } 
}); 

El componente de llamadas Ajax con éxito el página web, pero no incluye ninguno de los datos de la publicación.
es decir - "(HttpServletRequest) request.getParameterMap.size() == 0" - Yo esperaría 3, pero estoy recibiendo cero.

modificar el comando anterior de puesto en un GET hace que todo funcione bien.

TIA

+0

Esta pregunta ha sido contestada en otros temas, como acabo topé con la causa del problema - el uso de FireBug, y abriendo la apertura del succionador de Net-hicky hacer, estoy viendo que el servidor web está respondiendo con un estado 302 en la llamada a la página web. Esbozaré mi solución al problema en un momento. –

Respuesta

-1

Uso success:

var formParams = "fe1=y&fe2=m&fe3=m"; 

$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: formParams, 
    success: function(data) { 
     alert('response data = ' + data); 
    } 
}); 
+2

Si usa 'success' o' complete' no tiene relación con los datos que no se envían al servidor en primer lugar. (Y puede usar 'complete' si quiere, funciona bien. :-)) –

1

Prueba esto:

$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: { fe1: "y", fe2: "m", fe3: "m" }, 
    complete: function(xmlRequestObject, successString){ 
     ymmReceiveAjaxResponse(xmlRequestObject, successString); 
    } 
}); 

Se debe trabajar.

+0

Mi error es que estaba tratando de acceder $ _POST ['data'] ... pero si quisiera hacerlo, lo haría tiene que tener como ** datos: {data: 'someValue'}, ** ... gracias por aclarar eso! – gnB

1

Su código según lo citado está bien (lo he intentado localmente).

Mi conjetura es que la cadena formParams en su pregunta es sólo un ejemplo, y que en realidad está haciendo algo para generar esa cadena sobre la marcha, y el problema radica en que el código lugar.

Por ejemplo, ¿está seguro de que estás escapando caracteres correctamente (utilizando encodeURIComponent)? O mejor aún, deje jQuery tratar con él, como este:

$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: { 
     fe1: $("#somefield1").val(), 
     fe2: $("#somefield2").val(), 
     fe3: $("#somefield3").val() 
    }, 
    complete: function(xmlRequestObject, successString){ 
     ymmReceiveAjaxResponse(xmlRequestObject, successString); 
    } 
}); 

Si se pasa en un objeto, jQuery se encargará de la URI-codificación para usted. Si realmente desea hacerlo usted mismo:

var formParams = 
    "fe1=" + encodeURIComponent($("#somefield1").val()) + 
    "fe2=" + encodeURIComponent($("#somefield2").val()) + 
    "fe3=" + encodeURIComponent($("#somefield3").val()); 
$.ajax({ 
    type: 'POST', 
    url: '/foo.jsp', 
    async: false, 
    data: formParams, 
    complete: function(xmlRequestObject, successString){ 
     ymmReceiveAjaxResponse(xmlRequestObject, successString); 
    } 
}); 

Allí no han codificado los nombres de los campos, porque esos nombres no tienen caracteres especiales en ellos; lo necesita si los nombres de sus formularios son más interesantes que eso.

+0

Tiene toda la razón de que se trata de código de código auxiliar; En realidad estoy invocando el método serialize() en un campo de formulario, es decir, 'var formParams = $ (" # myForm "). Serialize();', y eso no parece hacer nada por mí. –

+0

@Missy: Hmmm, 'serialize' manejará la codificación por ti, así que no es así. Fundamentalmente, el código debería funcionar, y funciona para este fin, por lo que tendrás que pasar por un depurador y ver qué envía realmente jQuery. Podría ser que jQuery haga su trabajo, pero por alguna razón la configuración que enruta la solicitud a su JSP está mal. –

5

La causa del problema fue encontrado usando quemador, y la apertura de la apertura del aparato neto.

que estoy viendo que el servidor web está respondiendo con un estado 302 en la llamada a la página web.

Ampliando la solicitud 302 en Firebug/Net, y examinando los parámetros, encabezados, respuestas y HTML identificó rápidamente que se trataba de un problema específico de la aplicación que se originaba en el servidor.

Gracias por la retroalimentación de todos

0

Después frustrante tratando durante cuatro horas, descubrí que es capaz de lograr esto mediante el establecimiento de la contentType en ajax POST de la siguiente manera,

var dataToSend = { 
    "username" : $("#username").val(), 
    "password" : $("#password").val() 
}; 

$.ajax({ 
    type: "POST", 
    url: "somepage.jsp", 
    data: dataToSend, 
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", //this is must 
    success: function(datum, msg, textStatus){ 
     $("#result").html("<h3>" + "Status : " + msg + "</h3>") 
     .fadeIn("slow"); 
    } 
}); 
Cuestiones relacionadas