2013-10-23 97 views
7

我有以下的jQuery AJAX請求:爲AJAX請求 「400錯誤的請求」 的響應

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

來自服務器的響應是:

「狀態」:400, 「狀態文本」: 「錯誤請求」
「客戶端發送的請求在語法上不正確。」

服務器運行Spring-MVC。但據我所知,它工作正常。因爲如果我使用郵遞員手動發送請求並且以下配置有效。

部首:

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

內容:

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

我不得不提到它是一個跨域請求(用於時間發展,它將在相同的域中被託管服務器)。我確實禁用了瀏覽器中的安全設置,並且對服務器的AJAX請求工作正常(只要我不需要發送數據)。

+0

什麼,當你形成一個基於瀏覽器的REST工具完全相同的請求,並提交它發生?你有沒有嘗試在發送之前將你的用戶對象串起來? –

+0

如果_server_不喜歡它收到的數據,那麼你應該問_server_爲什麼 - 意思是,記錄實際進入的請求,檢查日誌文件等。 – CBroe

+0

我只是嘗試了stringify,它的工作原理。我很困惑,因爲我認爲這是如果你在jQuery.ajax上拋出一個對象會發生什麼。發佈它作爲答案,我會接受它。 – rob

回答

6

需要序列您的JSON,嘗試:

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