2014-07-21 12 views
21

Sto utilizzando una risorsa $ angolare come quella qui sotto.

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

    }; 
}); 

Questo è ciò che ottengo quando un messo un punto di interruzione di dati:

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

howerver, il server invia:

['welcome','hello'] 

Qualcuno sa perché le corde ottengono spaccatura?

Grazie

risposta

39

hai incontrato un bug divertimento con $ risorsa di angolare in cui non può gestire una serie cruda di stringhe; Come soluzione alternativa, si può fare una delle tre cose:

  • utilizzare il servizio http $ invece
  • inviare una risposta oggetto avvolto tramite il server ad esempio: { "stuff" : [ "your", "strings" ] }
  • forza i dati di risposta nel formato di cui sopra dalla parte del cliente; $ Risorsa ad esempio: methodName: {method:'GET', url: "/some/location/returning/array", transformResponse: function (data) {return {list: angular.fromJson(data)} }} e poi accedervi come data.list

Vedere la mia risposta a https://stackoverflow.com/a/22491240/626810

+5

Questa domanda & risposta anche applica se il server restituisce una stringa JSON – Claudiu

+0

Nizza! Questo ha risolto il problema. – Mateusgf

2

Questo funziona per la risposta RAW. Questa è una versione leggermente diversa dalla risposta sopra, ma è generica e non dipende solo dalla risposta JSON. Questo fondamentalmente muterà la risposta RAW al formato String. Sarà necessario accedere $ risultato promessa delle risorse come 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() } } 
     } 
    }); 
} 
Problemi correlati