2013-10-23 12 views
7

Ho la seguente richiesta jQuery AJAX:"400 Bad Request" risposta per la richiesta AJAX

// collect form data and create user obj 
var user = new User(); 
user.firstname = $("#usrFirstName").val(); 
user.lastname = $("#usrSurname").val(); 
user.role = $("#usrRole").val(); 

// actual ajax request 
$.ajax({ 
    type: 'POST', 
    url : 'http://awesome-url', 
    crossDomain: true, 
    data: user, 
    contentType:"application/json; charset=utf-8", 
    dataType: 'json' 
}).done(function(data, status) { 
    alert(JSON.stringify(data)); 
}).fail(function(data, status) { 
    alert(status); 
    alert(JSON.stringify(data)); 
}); 

La risposta dal server è:

"status": 400, "statusText": "Richiesta errata"
"La richiesta inviata dal client era sintatticamente errata."

Il server esegue Spring-MVC. Ma per quanto posso dire che funziona correttamente. Perché se sto inviando una richiesta manualmente con Postman e la seguente configurazione funziona.

Intestazione:

Content-Type application/json; charset=utf-8 

Content:

{"firstname":"alex","lastname":"lala","role":"admin"} 

devo dire che si tratta di una richiesta di cross-domain (per il momento in via di sviluppo, che sarà ospitato sullo stesso dominio come il server più tardi). Ho disabilitato le impostazioni di sicurezza nel browser e le richieste AJAX al server funzionano correttamente (a condizione che non debba inviare dati).

+0

Cosa succede quando si forma la stessa esatta richiesta in uno strumento di REST basato su browser e inviarlo? Hai provato a stringificare il tuo oggetto utente prima di inviarlo? –

+0

Se al _server_ non piacciono i dati che riceve, allora dovresti chiedere al _server_ perché - cioè, registrare quale richiesta sta effettivamente arrivando, controllare i file di registro, ecc. – CBroe

+0

Ho appena provato a stringificare e funziona. Sono molto confuso perché ho pensato che questo è ciò che accade se lanci un oggetto su jQuery.ajax. Pubblicalo come risposta e lo accetterò. – rob

risposta

6

è necessario serializzare il vostro JSON, provare:

$.ajax({ 
    type: 'POST', 
    url : 'http://awesome-url', 
    crossDomain: true, 
    data: JSON.stringify(user), 
    contentType:'application/json; charset=utf-8', 
    dataType: 'json' 
}) 
Problemi correlati