2014-07-22 22 views
7

Tôi đang cố gắng thực hiện yêu cầu POST gốc có sử dụng Angular $ http với mã sau.

//I've tried setting and removing these http config options 
$http.defaults.useXDomain = true; 
delete $http.defaults.headers.common['X-Requested-With']; 
$http.defaults.headers.common['Content-Type'] = 'application/x-www-form-urlencoded'; 

//Basic request, with some private headers removed 
return $http({ 
    method: 'POST', 
    //withCredentials:true, 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, 
    params: params, 
    url: url 
}); 

các tùy chọn theo yêu cầu preflight được một 200 OK, nhưng POST tiếp theo nhận được một phản ứng 400 Bad Request. Nhìn vào dấu vết trong cửa sổ gỡ lỗi của Chrome, tôi không thấy tiêu đề Content-Type: application/x-www-form-urlencoded; charset=UTF-8 cho POST. Tôi cho rằng đây là lý do tại sao máy chủ trả về phản hồi Yêu cầu không hợp lệ.

Tôi đang đặt một số tiêu đề tùy chỉnh khác mà tôi đã bỏ qua dưới dạng mã ở trên và chúng đang được gửi và hiển thị tốt.

Tôi cũng nên đề cập rằng tôi có thể đưa ra yêu cầu này bằng ứng dụng Ứng dụng khách nâng cao dành cho Chrome và nhận được phản hồi chính xác. (Mã thông báo truy cập)

Tôi cũng đã thử chỉ thực hiện một XMLHttpRequest thẳng(), nhưng tôi gặp lỗi tương tự.

Bất kỳ thông tin chi tiết nào về lý do tiêu đề Loại nội dung của tôi không được đặt?

+0

Bản sao có thể có của [Góc, loại nội dung không được gửi với $ http] (http://stackoverflow.com/questions/16194442/angular-content-type-is-not-being-sent-with-http) –

Trả lời

11

Tôi không chắc chắn tiêu đề Content-Type sẽ được gửi nếu bạn KHÔNG gửi bất kỳ dữ liệu nào. Thêm một đối tượng data và thử nó:

return $http({ 
    method: 'POST', 
    //withCredentials:true, 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, 
    data: data, 
    url: url 
}); 

Ngoài ra, thường là với một bài bạn sử dụng data thay vì params (có được).

Bạn cũng có thể tham khảo này SO câu hỏi đó có một số thông tin thêm về làm thế nào để chuyển đổi dữ liệu nếu bạn cần phải: How can I post data as form data instead of a request payload?

+1

Vâng, cảm ơn. Tôi nhận ra điều đó ngay bây giờ. Tiêu đề xuất hiện khi tôi chuyển một số dữ liệu. Tuy nhiên, vẫn nhận được yêu cầu '400 Bad Request'. Vì vậy, tôi đoán câu hỏi được trả lời, nhưng tôi vẫn nhận được phản hồi tương tự. Không chắc chuyện gì đang diễn ra. – user3783608

+0

Câu hỏi của bạn là về Loại nội dung.Nếu bạn có câu hỏi riêng về yêu cầu 400, hãy tạo một câu hỏi mới với các bit mã cụ thể (máy chủ và máy khách). Tôi đoán là bạn không gửi mã thông báo với yêu cầu (trong tiêu đề ???) – lucuma

+1

Tôi đang gửi dữ liệu và nó vẫn chưa được đặt. – AlxVallejo

1

Vấn đề của tôi là tôi đã thiết lập các biến data đến một đối tượng thay vì một chuỗi .

return $http({ 
    method: 'POST', 
    //withCredentials:true, 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, 
    data: {'key1':'value1', 'key2':'value2'}, 
    url: url 
}); 

Khi tôi thay đổi nó để data:'key1=value1&key2=value2' nó làm việc tốt. Ngoài ra còn có một dấu gạch chéo ngược trong đó mà tôi đã phải tự đặt mã %5c cho.

+0

Bạn cũng có thể chuyển đổi nó theo yêu cầu. Xem câu trả lời với 60 upvotes (5 xuống) http://stackoverflow.com/questions/11442632/how-can-i-make-angular-js-post-data-as-form-data-instead-of-a -request-payload – lucuma

7

Tiêu đề 'Loại nội dung' không được thêm vào yêu cầu nếu thuộc tính dữ liệu chưa được xác định, bạn có thể gửi chuỗi rỗng dưới dạng dữ liệu "" chẳng hạn.

var req = { 
       method: 'GET', 
       url: '<your url here>', 
       //headers: { 
       // 'Content-Type': 'application/json;charset=utf-8' 
       //}, 
       data: "" 
      }; 
    $http(req); 
+0

hoạt động tuyệt vời !!!, đây có phải là lỗi góc hay là gì ?? Tham số dữ liệu –

0

hơn bạn rất nhiều "Liran B" sửa chữa của bạn làm việc như một nhà vô địch cho tôi .... vấn đề đã được bugging tôi từ vài giờ ....

var req = { 
       method: 'GET', 
       url: '<your url here>', 
       //headers: { 
       // 'Content-Type': 'application/json;charset=utf-8' 
       //}, 
       data: "" 
      }; 

    $http(req); 
1

tôi phải đối mặt với cùng một vấn đề , trong khi thiết lập các tiêu đề. chúng tôi cần gửi thông số dữ liệu theo yêu cầu $http như thế này

$http({ 
    method: 'POST', 
    headers: { 'Content-Type': 'application/json}, 
    data: {}, 
    url: url 
}); 

chúng tôi cũng có thể gửi dữ liệu trống. nó sẽ hoạt động tốt.

+0

là bắt buộc –

Các vấn đề liên quan