2013-10-23 18 views
7

Tôi có yêu cầu jQuery AJAX sau:"400 Bad Request" đáp ứng cho yêu cầu 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)); 
}); 

Các phản hồi từ máy chủ là:

"trạng thái": 400, "statusText": "Yêu cầu không hợp lệ"
"Yêu cầu do khách hàng gửi không chính xác về cú pháp".

Máy chủ đang chạy Spring-MVC. Nhưng theo như tôi có thể nói nó hoạt động chính xác. Bởi vì nếu tôi gửi một yêu cầu thủ công với Postman và cấu hình sau nó sẽ hoạt động.

Tiêu đề:

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

Nội dung:

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

tôi phải đề cập đến rằng đó là một yêu cầu cross-domain (cho thời gian phát triển, nó sẽ được lưu trữ trên cùng một tên miền như máy chủ sau). Tôi đã vô hiệu hóa các thiết lập bảo mật trong trình duyệt và các yêu cầu AJAX tới máy chủ đang hoạt động tốt (miễn là tôi không phải gửi dữ liệu).

+0

xảy ra khi bạn tạo cùng yêu cầu chính xác trong một công cụ REST của dựa trên trình duyệt và trình gì? Bạn đã cố gắng xâu chuỗi đối tượng Người dùng của mình trước khi gửi chưa? –

+0

Nếu _server_ không thích dữ liệu nhận được, thì bạn nên hỏi _server_ why - meaning, đăng nhập yêu cầu thực sự đến, kiểm tra tệp nhật ký, v.v. – CBroe

+0

Tôi vừa thử xâu chuỗi và hoạt động. Tôi rất bối rối vì tôi nghĩ rằng đây là những gì sẽ xảy ra nếu bạn ném một đối tượng tại jQuery.ajax. Đăng nó như là một câu trả lời và tôi sẽ chấp nhận nó. – rob

Trả lời

6

bạn cần phải serialize json của bạn, hãy thử:

$.ajax({ 
    type: 'POST', 
    url : 'http://awesome-url', 
    crossDomain: true, 
    data: JSON.stringify(user), 
    contentType:'application/json; charset=utf-8', 
    dataType: 'json' 
}) 
Các vấn đề liên quan