Corpo POST AJAX.Request non inviato
-
03-07-2019 - |
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
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.