2014-07-21 12 views
21

Tôi đang sử dụng tài nguyên $ góc cạnh như sau.

angular.module('app') 
.factory('data', function ($resource) { 

    var Con = $resource('/api/data', {}, { 
     update : {method : 'PUT'} 
    }); 

    return {  

     getData : function (user_id, callback) { 

      return Con.query({user_id : user_id}, function (data) { 
       cb(data); // (breakpoint) HERE data is not good 
      }, function (err) { 
       cb(err); 
      }).$promise; 
     } 

    }; 
}); 

Đây là những gì tôi nhận được khi một đặt một breakpoint trên dữ liệu:

[ 
    ['w','e','l','c','o','m','e'], 
    ['h','e','l','l','o'] 
] 

howerver, máy chủ gửi:

['welcome','hello'] 

ai biết lý do tại sao có được những dây chia?

Cảm ơn bạn

Trả lời

39

Bạn đã gặp lỗi thú vị với tài nguyên $ của góc cạnh nơi không thể xử lý chuỗi chuỗi thô; như một cách giải quyết, bạn có thể làm một trong ba điều:

  • sử dụng các $ dịch vụ http thay
  • gửi một phản ứng đối tượng quấn qua máy chủ ví dụ: { "stuff" : [ "your", "strings" ] }
  • lực lượng dữ liệu phản ứng sang định dạng trên phía khách hàng; $ Nguồn ví dụ: methodName: {method:'GET', url: "/some/location/returning/array", transformResponse: function (data) {return {list: angular.fromJson(data)} }} và sau đó truy cập vào nó như data.list

Xem câu trả lời của tôi tại https://stackoverflow.com/a/22491240/626810

+5

Câu hỏi này và trả lời cũng được áp dụng nếu máy chủ trả về một chuỗi JSON – Claudiu

+0

Nice! Điều đó giải quyết được vấn đề. – Mateusgf

2

này làm việc cho phản ứng RAW. Đây là một phiên bản hơi khác so với câu trả lời ở trên nhưng điều này là chung chung và không chỉ phụ thuộc vào phản hồi JSON. Điều này về cơ bản sẽ biến đổi phản hồi RAW thành định dạng String. Bạn sẽ cần phải truy cập vào $ result lời hứa tài nguyên như result.responseData

getAPIService() { 
    return this.$resource(this.apiUrl, {}, { 
     save: { 
      method: 'POST', 
      headers: { 
       'Accept': 'text/plain, text/xml', 
       'Content-Type': 'text/xml' 
      }, 
      transformResponse: function (data) { return { responseData: data.toString() } } 
     } 
    }); 
} 
Các vấn đề liên quan