2012-07-31 20 views
6

tengo un controlador simple, como:

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

Todo funciona como se esperaba, pero tengo un problema. La devolución de JSON se comenta con/** */por razones de seguridad. Con jQuery extendí el objeto $ .ajax para eliminar estos comentarios y luego analizar el resultado. Me gustaría lograr lo mismo con AngularJS y de alguna manera decirle $ http para eliminar los comentarios de cada respuesta también. Quiero hacer esto para toda mi aplicación y evitar escribir siempre igual.

¿Alguna idea de cómo puedo hacer eso?

Respuesta

7

Vas a querer transformar todas tus $http respuestas. No he hecho esto antes, pero la documentación relevante está debajo.

Las solicitudes y respuestas Transformando

Ambas solicitudes y respuestas se pueden transformar usando transformar funciones. Por defecto, se aplica angular estas transformaciones:

Solicitar Transformaciones:

  • si la propiedad data del objeto de la petición de configuración contiene un objeto, serializarlo en formato JSON.

transformaciones de respuesta:

  • si se detecta XSRF prefijo, despojarlo (ver Consideraciones de Seguridad sección de abajo)
  • si se detecta respuesta JSON, deserializar usando un analizador JSON

Para anular estas transformaciones localmente, especifique tra nforma las funciones como transformRequest y/o transformResponse propiedades del objeto de configuración. Para anular globalmente las transformaciones predeterminadas, anule las propiedades $ httpProvider.defaults.transformRequest y $ httpProvider.defaults.transformResponse del $ httpProvider.

Lee más en la $http service documentation.

+0

Lo siento por aceptar tarde. De hecho, me perdí una parte importante en los documentos que mencionaste (los leí antes de preguntar). De todos modos ahora hice un interceptor que transforma mis solicitudes gracias a su pista. – Christian

+0

@Christian ¿puedes publicar tu transformación como ejemplo? – colllin

3

Es posible que desee cambiar de embalar sus respuestas JSON en /** */ a la que ya cuenta con el apoyo de la caja por $http. En su lugar, prefija sus respuestas JSON con )]}',\n.

p. Ej.Si su respuesta JSON es:

['one','two'] 

entonces, en vez de volver:

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

simplemente volver:

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

Para más detalles, ver el sección JSON Protección vulnerabilidad en http://docs.angularjs.org/api/ng.$http.

+0

Gracias. De hecho, ya lo vi. Desafortunadamente no puedo cambiarlo tan fácilmente porque necesito permanecer compatible con versiones anteriores. Esto requeriría mucha atención que actualmente no tengo. Lo ahorraré para un momento posterior. De todos modos, lo voté de arriba abajo, porque otros deberían ver que tu respuesta es realmente buena. – Christian