2012-07-31 18 views
6

ho un semplice controllo, come:

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

Tutto funziona come previsto, ma ho un problema. Il JSON restituito viene commentato con/** */per motivi di sicurezza. Con jQuery ho esteso l'oggetto $ .ajax per rimuovere questi commenti e quindi analizzare il risultato. Mi piacerebbe ottenere lo stesso con AngularJS e in qualche modo dire $ http per rimuovere anche i commenti da ogni risposta. Voglio farlo per tutta la mia applicazione ed evitare di digitare sempre lo stesso.

Qualche idea su come posso farlo?

risposta

7

Hai intenzione di voler trasformare tutte le tue risposte $http. Non l'ho mai fatto prima, ma la documentazione pertinente è riportata di seguito.

Trasformare Le richieste e le risposte

Entrambe le richieste e le risposte possono essere trasformati utilizzando trasformare funzioni. Per impostazione predefinita, angolare applica queste trasformazioni:

Richiesta trasformazioni:

  • se la proprietà data dell'oggetto richiesta di configurazione contiene un oggetto, serializzare in formato JSON.

trasformazioni di risposta:

  • se viene rilevato il prefisso XSRF, striscia (v Considerazioni di sicurezza sezione sottostante)
  • se viene rilevato risposta JSON, deserializzare utilizzando un parser JSON

Per sovrascrivere queste trasformazioni localmente, specificare tra nsform funziona come transformRequest e/o transformResponse proprietà dell'oggetto config. Per sovrascrivere globalmente le trasformazioni predefinite , sovrascrivere le proprietà $ httpProvider.defaults.transformRequest e $ httpProvider.defaults.transformResponse dello $ httpProvider.

Leggi tutto nella $http service documentation.

+0

Ci scusiamo per il ritardo. In realtà ho perso una parte importante nei documenti che hai citato (li ho letti prima che glielo chiedessi). Ad ogni modo ora ho realizzato un intercettore che trasforma le mie richieste grazie al tuo suggerimento. – Christian

+0

@Christian puoi pubblicare la tua trasformazione come esempio? – colllin

3

Si potrebbe desiderare di passare da afferrare con le risposte JSON in /** */ a quello che è già supportato dalla scatola da $http. Invece, anteponi le tue risposte JSON con )]}',\n.

ad es.Se la vostra risposta JSON è:

['one','two'] 

allora, invece di tornare:

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

ritorno semplice:

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

Per i dettagli, vedere la sezione JSON vulnerabilità di protezione in http://docs.angularjs.org/api/ng.$http.

+0

Grazie. L'ho già visto. Purtroppo non posso cambiarlo così facilmente perché ho bisogno di rimanere compatibile con le versioni precedenti. Ciò richiederebbe molta attenzione che al momento non ho. Lo risparmierò per un secondo momento. Ad ogni modo, l'ho svalutato, perché altri dovrebbero vedere che la tua risposta è davvero buona. – Christian

Problemi correlati