Pergunta

Eu estou tentando criar uma solicitação POST, infelizmente, o corpo do POST parece nunca ser enviada.

Abaixo está o código que estou usando. O código é chamado quando um usuário clica em um link, não é uma forma botão "enviar". Ele é executado sem erro, invoca o servlet que está sendo chamado, mas, como já referi anteriormente, o corpo do POST parece nunca ser enviada.

Eu posso confirmar que o corpo da solicitação nunca é enviado desde que eu tenho acesso ao servlet sendo chamado.

Eu tentei usar "parâmetros" em substituição de "requestBody." Eu também tentei usando uma seqüência de parâmetro (x = a? Y = b). Eu também validado que "ckULK" contém um valor válido.

Todas as idéias?

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
Foi útil?

Solução

Estes são o tipo de situações em que Firebug e Firefox são realmente úteis. Eu sugiro que você instale Firebug se você não tê-lo e verificar o pedido que está sendo enviada.

Você também precisa definitivamente de furar a parameters vez de requestBody.

Este:

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

deve definitivamente trabalho.

Outras dicas

Basta passar os dados como parameters para o Pedido de construtor Ajax:

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

Quando eu bati este problema a solução era remover contentType de opções Ajax.Request.

Na resposta href="https://stackoverflow.com/a/216074/1483"> por Paolo Bergantino contentType não está definido no opções Ajax.Request.

A partir razões desconhecidas params definidos no parameters não foi enviada (FF não mostrá-los e minha serra servidor corpo POST vazio).

Um dos meus colegas de trabalho sugerido para uso postBody vez de parameters mas eu não tentar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top