2014-07-21 14 views
21

Używam ograniczonego zasobu $ podobnego do poniższego.

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; 
     } 

    }; 
}); 

To co mam, gdy umieścić punkt przerwania danych:

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

howerver, serwer wysyła:

['welcome','hello'] 

ktoś wie dlaczego struny się podział?

Dziękuję

Odpowiedz

39

pan napotkasz błędu zabawy z kątowym za $ zasobu, w którym nie może obsłużyć surowego tablicę ciągów; jako obejście, można zrobić jedną z trzech rzeczy:

  • korzystać z usługi http $ zamiast
  • wysłać odpowiedź obiektowo owinięty poprzez np serwera: { "stuff" : [ "your", "strings" ] }
  • siły Dane odpowiedzi do powyższego formatu Strona klienta; $ Np zasób: methodName: {method:'GET', url: "/some/location/returning/array", transformResponse: function (data) {return {list: angular.fromJson(data)} }} a następnie uzyskać dostęp go jako data.list

Zobacz moją odpowiedź na https://stackoverflow.com/a/22491240/626810

+5

To pytanie i odpowiedzieć na zastosowanie również wtedy, gdy serwer zwraca ciąg JSON – Claudiu

+0

Nice! To rozwiązało problem. – Mateusgf

2

To działa na odpowiedź RAW. Jest to nieco inna wersja niż powyższa odpowiedź, ale jest to ogólne i nie zależy tylko od odpowiedzi JSON. To zasadniczo zmutuje odpowiedź RAW na format String. Będziesz mieć dostęp do zasobów $ wynik obiecującym 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() } } 
     } 
    }); 
}