Domanda

Sto cercando di creare una richiesta POST, sfortunatamente il corpo del POST non sembra mai essere inviato.

Di seguito è riportato il codice che sto usando. Il codice viene invocato quando un utente fa clic su un collegamento, non su un modulo "invia". pulsante. Funziona senza errori, invoca il servlet che viene chiamato ma, come ho già detto, il corpo del POST non sembra mai essere inviato.

Posso confermare che il corpo della richiesta non viene mai inviato poiché ho accesso al servlet chiamato.

Ho provato a usare " parametri " in sostituzione di " requestBody. " Ho anche provato a utilizzare una stringa di parametri (x = a? Y = b). Ho anche verificato che "ckULK" contiene un valore valido.

Qualche 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
È stato utile?

Soluzione

Queste sono le situazioni in cui Firebug e Firefox sono davvero utili. Ti suggerisco di installare Firebug se non lo hai e controllare la richiesta che viene inviata.

Devi assolutamente attenerti ai parametri anziché a requestBody .

Questa:

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

Dovrebbe sicuramente funzionare.

Altri suggerimenti

Passa semplicemente i dati come parametri al costruttore della richiesta Ajax:

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

Quando ho riscontrato questo problema, la soluzione era rimuovere contentType dalle opzioni Ajax.Request .

In risposta di Paolo Bergantino contentType non è definito nelle opzioni Ajax.Request .

Per ragioni sconosciute i parametri definiti in parametri non sono stati inviati (FF non li ha mostrati e il mio server ha visto il corpo POST vuoto).

Uno dei miei colleghi mi ha suggerito di usare postBody invece di parametri ma non l'ho provato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top