2013-08-30 21 views
6

Tôi chỉ muốn gửi JSONobjects sau để API backend của tôi:

{ 
    "username":"alex", 
    "password":"password" 
} 

Vì vậy, tôi đã viết hàm sau, sử dụng góc $ http:

$http(
{ 
    method: 'POST', 
    url: '/api/user/auth/', 
    data: '{"username":"alex", "password":"alex"}', 
}) 
.success(function(data, status, headers, config) { 
// Do Stuff 
}) 
.error(function(data, status, headers, config) { 
// Do Stuff 
}); 

Tôi đã đọc tài liệu về phương thức POST rằng tiêu đề Loại nội dung sẽ tự động được đặt thành "application/json".

Nhưng tôi nhận ra rằng loại nội dung tôi nhận được trên phụ trợ của tôi (Django + Tastypie) api là "văn bản/đồng bằng".

Điều này khiến API của tôi không phản hồi đúng yêu cầu này. Tôi nên quản lý loại nội dung này như thế nào?

+0

Phần phụ trợ của bạn đang truy xuất chi tiết như thế nào? – BKM

+0

Tôi sử dụng Django Tastypie cho chương trình phụ trợ của tôi. Tôi thấy văn bản/đồng bằng trong loại nội dung gửi bởi $ http. raw_post_data hoặc dữ liệu POST cũng trống. –

+0

Rất lạ ... Nếu tôi đặt tiêu đề: {'Content-Type': 'application/x-www-form-urlencoded; charset = UTF-8 '} nó đang hoạt động .. Nhưng nếu tôi đặt ứng dụng/json ... nó không phải là ... –

Trả lời

0

Hãy thử điều này;

$http.defaults.headers.post["Content-Type"] = "application/json"; 

$http.post('/api/user/auth/', data).success(function(data, status, headers, config) { 
// Do Stuff 
}) 
.error(function(data, status, headers, config) { 
// Do Stuff 
}); 
2

Giải pháp mà tôi đã chuyển tiếp là luôn khởi tạo mô hình trên phạm vi $ thành khối trống {} trên mỗi bộ điều khiển. Điều này đảm bảo rằng nếu không có dữ liệu nào bị ràng buộc với mô hình đó thì bạn sẽ vẫn có một khối trống để chuyển sang phương thức $ http.put hoặc $ http.post của bạn.

myapp.controller("AccountController", function($scope) { 
    $scope.user = {}; // Guarantee $scope.user will be defined if nothing is bound to it 

    $scope.saveAccount = function() { 
     users.current.put($scope.user, function(response) { 
      $scope.success.push("Update successful!"); 
     }, function(response) { 
      $scope.errors.push("An error occurred when saving!"); 
     }); 
    }; 
} 

myapp.factory("users", function($http) { 
    return { 
     current: { 
      put: function(data, success, error) { 
       return $http.put("https://stackoverflow.com/users/current", data).then(function(response) { 
        success(response); 
       }, function(response) { 
        error(response); 
       }); 
      } 
     } 
    }; 
}); 

Một cách khác là sử dụng nhị phân || toán tử trên dữ liệu khi gọi $ http.put hoặc $ http.post để đảm bảo đối số đã xác định được cung cấp:

$http.put("https://stackoverflow.com/users/current", data || {}).then(/* ... */); 
Các vấn đề liên quan