2012-07-31 18 views
6

Tôi có một bộ điều khiển đơn giản, như:

function MyController($scope, $http) { 
    ... 
    $http.post(url).success(function(data) { 
      console.log(data) 
     }); 
} 
MyController.$inject = ['$scope', '$http']; 

Tất cả mọi thứ hoạt động như mong đợi, nhưng tôi có một vấn đề. JSON trả về được nhận xét với/** */vì lý do bảo mật. Với jQuery tôi đã mở rộng đối tượng $ .ajax để loại bỏ các chú thích này và sau đó phân tích cú pháp kết quả. Tôi muốn đạt được cùng với AngularJS và bằng cách nào đó nói với $ http để loại bỏ các ý kiến ​​từ mỗi phản ứng quá. Tôi muốn làm điều này cho toàn bộ ứng dụng của mình và tránh việc nhập luôn giống nhau.

Bất kỳ ý tưởng nào về cách tôi có thể làm điều đó?

Trả lời

7

Bạn sẽ muốn chuyển đổi tất cả các câu trả lời $http của mình. Tôi đã không làm điều này trước đây, nhưng các tài liệu có liên quan là dưới đây.

Các yêu cầu Chuyển đổi và Responses

Cả hai yêu cầu và phản ứng có thể được chuyển bằng chuyển chức năng. Theo mặc định, góc áp dụng những biến đổi:

Yêu cầu biến đổi:

  • nếu tài sản dữ liệu của đối tượng yêu cầu cấu hình chứa một đối tượng, serialize nó sang định dạng JSON.

biến đổi đáp ứng:

  • nếu XSRF tiền tố được phát hiện, dải nó (xem cân nhắc an ninh phần dưới đây)
  • nếu phản ứng json được phát hiện, deserialize nó sử dụng một phân tích cú pháp JSON

Để ghi đè chuyển đổi cục bộ này, hãy chỉ định tra các hàm nsform như các thuộc tính transformRequest và/hoặc transformResponse của đối tượng config. Để ghi đè toàn cầu các biến đổi mặc định , hãy ghi đè các thuộc tính $ httpProvider.defaults.transformRequest và $ httpProvider.defaults.transformResponse của $ httpProvider.

Read more trong $http service documentation.

+0

Rất tiếc vì đã chấp nhận trễ. Tôi thực sự đã bỏ lỡ một phần quan trọng trong các tài liệu bạn đã đề cập (tôi đọc chúng trước khi tôi hỏi). Dù sao bây giờ tôi đã thực hiện một interceptor mà biến đổi yêu cầu của tôi nhờ gợi ý của bạn. – Christian

+0

@Christian bạn có thể đăng biến đổi của mình làm ví dụ không? – colllin

3

Bạn có thể muốn chuyển từ gói phản ứng JSON của bạn trong /** */ đó mà đã được hỗ trợ ra khỏi hộp bởi $http. Thay vào đó, hãy thêm tiền tố cho các phản hồi JSON của bạn với )]}',\n.

ví dụ:Nếu phản ứng JSON của bạn là:

['one','two'] 

sau đó, thay vì trả lại:

/**['one','two']*/ 

chỉ cần trả:

)]}', 
['one','two'] 

Để biết chi tiết, vui lòng xem JSON Vulnerability Protection phần trong http://docs.angularjs.org/api/ng.$http.

+0

Cảm ơn bạn. Tôi thực sự đã thấy điều đó rồi. Thật không may tôi không thể thay đổi nó dễ dàng như vậy bởi vì tôi cần phải duy trì tương thích ngược. Điều này đòi hỏi nhiều sự chú ý mà tôi hiện không có. Tôi sẽ tha thứ cho một thời gian sau đó. Dù sao, tôi upvoted nó, bởi vì khác nên xem câu trả lời của bạn là một trong những thực sự tốt. – Christian