2015-01-04 15 views
13

Tôi có một tập tin "test.ini" trong máy chủ của tôi, bao gồm các văn bản sau đây:

"[ALL_OFF] 
[ALL_ON] 
" 

Tôi đang cố gắng để có được nội dung tập tin này qua $http dịch vụ, đây là một phần chức năng của tôi:

var params = { url: 'test.ini'}; 
$http(params).then(
       function (APIResponse) 
        { 
        deferred.resolve(APIResponse.data); 
        }, 
        function (APIResponse) 
        { 
        deferred.reject(APIResponse); 
        }); 

Thao tác này có ngoại lệ góc (SyntaxError: Unexpected token A).
Tôi mở tập tin khuôn khổ kiễu góc, và tôi thấy các exeption:
Bởi vì nội dung file văn bản bắt đầu với "[" và kết thúc bằng "]", góc "nghĩ" đó là một tập tin JSON.

Đây là mã kiễu góc (dòng 7474 trong 1.2.23 phiên bản):

var defaults = this.defaults = { 
    // transform incoming response data 
    transformResponse: [function(data) { 
     if (isString(data)) { 
     // strip json vulnerability protection prefix 
     data = data.replace(PROTECTION_PREFIX, ''); 
     if (JSON_START.test(data) && JSON_END.test(data)) 
      data = fromJson(data); 
     } 
     return data; 
    }], 

Câu hỏi của tôi:

Làm thế nào tôi có thể lực góc để không làm cho việc kiểm tra này (if (JSON_START.test(data) && JSON_END.test(data))) và không phải là phân tích cú pháp phản hồi văn bản thành JSON?

+0

Làm cho máy chủ của bạn trả về tệp bằng 'text/plain' thì nó sẽ hoạt động tốt – maurycy

Trả lời

35

Bạn có thể ghi đè lên giá trị mặc định của thành viên này:

$http({ 
    url: '...', 
    method: 'GET', 
    transformResponse: [function (data) { 
     // Do whatever you want! 
     return data; 
    }] 
}); 

Chức năng ở trên thay thế chức năng mặc định, bạn có postet cho yêu cầu HTTP này.

Hoặc đọc this nơi họ đã viết "Ghi đè chuyển đổi mặc định cho mỗi yêu cầu".

+16

Hoặc đơn giản là' transformResponse: undefined' để không chuyển đổi. – dfsq

+1

@dfsq câu trả lời này tôi đã tìm kiếm - "transformResponse: undefined", cảm ơn! – cheziHoyzer

+0

@dfsq bạn tìm thấy phần bị thiếu trong tài liệu. : D – Superole

7

Bạn cũng có thể buộc góc để điều trị các phản ứng dưới dạng văn bản đơn giản và không JSON:

$http({ 
    url: '...', 
    method: 'GET', 
    responseType: 'text' 
}); 

Điều này sẽ đảm bảo rằng góc không cố gắng để tự động phát hiện các loại nội dung.

+0

có vẻ không hoạt động, AngularJS v1.5.2 – elprup

+0

Nó không hoạt động vì 'content-type' trong tiêu đề phản hồi là sai (có thể là' application/json'). Infact nếu máy chủ cung cấp chính xác 'content-type' bạn không cần phải thêm' responseType: 'text'' vào cấu hình của bạn, và angular sẽ tôn trọng điều đó. –

+0

@AlirezaMirian đó là sự thật. Lý do duy nhất để thêm nó vào Angular là vì vậy nó không cố gắng phân tích cú pháp nó như JSON nếu không có 'kiểu nội dung' được cung cấp bởi máy chủ. – Ties

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