with example javascript angularjs jsonp

javascript - example - jsonp angular 7



¿Cómo puedo insertar comandos antes o prevenir el análisis automático JSONP de $ http en AngularJS? (3)

Parece que casi todas las preguntas o explicaciones que encuentro con respecto a $ http o angularjs en general suponen que puede modificar la respuesta de sus solicitudes. No puedo hacer eso y la respuesta que estoy recibiendo es incorrecta (según el analizador de AngularJS). Tiene un formato incorrecto de manera coherente, por lo que podría modificar el texto simple para solucionar el problema antes de analizarlo, pero tanto los interceptores de respuesta como las funciones de respuesta de transformación se producen después del análisis predeterminado (¿basado en el tipo de contenido?).

Edición: el problema está en el hecho de que necesito usar la metodología JSONP para realizar una solicitud de información desde otro sitio, pero los datos no tienen la devolución de llamada JSONP esperada, por lo que hay algo (aún no estoy seguro de si está basado en el navegador en el contenido o el código AngularJS) produce un error de sintaxis.

Nueva pregunta: ¿Alguien sabe una manera de evitar esto?



Esto es lo que dice la documentación angular

Para aumentar o anular globalmente las transformaciones predeterminadas, modifique las propiedades $ httpProvider.defaults.transformRequest y $ httpProvider.defaults.transformResponse. Estas propiedades son, por defecto, una matriz de funciones de transformación, que le permite impulsar o cambiar una nueva función de transformación en la cadena de transformación. También puede decidir anular completamente cualquier transformación predeterminada asignando sus funciones de transformación a estas propiedades directamente sin la envoltura de matriz.

Básicamente, lo que debería hacer es configurar $ httpProvider

angular.module(''myApp'', []) .config([''$httpProvider'', function ($httpProvider) { //Define your transform function //push your trasform function to the start of the array $httpProvider.defaults.transformResponse //Or replace the transformResponse array with a function or a new array of tranform functions. }]);

Ahora la función de transformación que implementa debe ser la primera función en la matriz. Dado que ya existe una cadena para la función de transformación JSON allí.


Esto ha sido probado y funciona. Déjame saber si tienes más preguntas. http://jsfiddle.net/moderndegree/Kn3Tc/

HTML

<div ng-app="myApp"> <div ng-controller="myController"> {{results.tada}} </div> </div>

Javascript

angular.module(''myApp'', [''ngResource'']). factory(''myService'', function($http, $resource, $log){ return $resource(''/'', {}, { get: { method: ''GET'', // placed custom transform ahead of $http default transformRequest: [function(data, headersGetter){ $log.info(data); $log.info(headersGetter()); }].concat($http.defaults.transformRequest), // placed custom transform ahead of $http default transformResponse: [function (data, headersGetter) { $log.info(data); $log.info(headersGetter()); data = {tada:"Check your console"}; return data; }].concat($http.defaults.transformResponse) } }); }). controller(''myController'', function(myService, $scope) { $scope.results = myService.get(); });

Actualizar Para usar JSONP, simplemente cambie el método a JSONP. Puedes leer más sobre ngResource here .