Pregunta

Estoy intentando crear una solicitud POST, desafortunadamente, parece que el cuerpo de la POST nunca se envía.

Debajo está el código que estoy usando. El código se invoca cuando un usuario hace clic en un enlace, no en un formulario " submit " botón. Se ejecuta sin errores, invoca el servlet que se está llamando pero, como mencioné anteriormente, el cuerpo de la POST nunca parece ser enviado.

Puedo validar que el cuerpo de la solicitud nunca se envía ya que tengo acceso al servlet al que se llama.

He intentado usar " parámetros " en reemplazo de " requestBody. " También he intentado usar una cadena de parámetros (x = a? Y = b). También he validado que " ckULK " contiene un valor válido.

¿Alguna idea?

new Ajax.Request(sURL,
{
    method: 'POST'
    , contentType: "text/x-json"
    , requestBody: {ulk:ckULK}
    , onFailure:
        function(transport)
        {
            vJSONResp = transport.responseText;
            var JSON = eval( "(" + vJSONResp + ")" );
            updateStatus(JSON.code + ": " + JSON.message);
        } // End onFailure
    , onSuccess: 
        function(transport) 
        {
            if (200 == transport.status)
            {
                vJSONResp = transport.responseText;
            }
            else
            {
                log.value += "\n" + transport.status;
            }
         } // End onSuccess
}); // End Ajax.request
¿Fue útil?

Solución

Este es el tipo de situaciones en las que Firebug y Firefox son realmente útiles. Le sugiero que instale Firebug si no lo tiene y que compruebe la solicitud que se está enviando.

Definitivamente, también debes seguir los parámetros en lugar de requestBody .

Esto:

new Ajax.Request(sURL,
{
    method: 'POST',
    parameters: 'hello=world&test=yes',
    onFailure: function(transport) {
        vJSONResp = transport.responseText;
        var JSON = eval( "(" + vJSONResp + ")" );
        updateStatus(JSON.code + ": " + JSON.message);
    },
    onSuccess: function(transport) {
        if (200 == transport.status) {
            vJSONResp = transport.responseText;
        } else {
            log.value += "\n" + transport.status;
        }
     }
});

Definitivamente debería funcionar.

Otros consejos

Simplemente pase los datos como parameters al constructor de Solicitud de Ajax:

new Ajax.Request(url, {
  method: 'POST', 
  parameters: {
    hello: "world", test: "test"
  },
  onSuccess: function(transport){
    var data = transport.responseText.evalJSON();
  }
});

Cuando encontré este problema, la solución fue eliminar contentType de las opciones de Ajax.Request .

En conteste por Paolo Bergantino contentType no se define en las opciones Ajax.Request .

Por razones desconocidas, los parámetros definidos en parámetros no se enviaron (FF no los mostró y mi servidor vio el cuerpo de POST vacío).

Uno de mis colegas sugirió usar postBody en lugar de parámetros pero no lo probé.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top