How to customize angularjs jsonp callback custom name?

I need to get json data from some website via angularjs. I did everything correctly according to the link below.

My problem is that the api does not allow the callback parameter to have any character except letters, numbers and _. And since angular replaces JSON_CALLBACK with something like angular.callbacks._0 ', it cannot be resolved.

How can I adjust this value for angularjs?

parsing JSONP $ http.jsonp () in angular.js

thanks

+8
angularjs jsonp
source share
1 answer

Callback names are hardcoded here httpBackend.js # L55 , so you cannot configure it.

But you could write an HTTP interceptor to get around it like this:

.factory('jsonpInterceptor', function($timeout, $window, $q) { return { 'request': function(config) { if (config.method === 'JSONP') { var callbackId = angular.callbacks.counter.toString(36); config.callbackName = 'angular_callbacks_' + callbackId; config.url = config.url.replace('JSON_CALLBACK', config.callbackName); $timeout(function() { $window[config.callbackName] = angular.callbacks['_' + callbackId]; }, 0, false); } return config; }, 'response': function(response) { var config = response.config; if (config.method === 'JSONP') { delete $window[config.callbackName]; // cleanup } return response; }, 'responseError': function(rejection) { var config = rejection.config; if (config.method === 'JSONP') { delete $window[config.callbackName]; // cleanup } return $q.reject(rejection); } }; }) 

Plunker example: http://plnkr.co/edit/S5K46izpIxHat3gLqvu7?p=preview

Hope this helps.

+10
source share

All Articles