как настроить имя обратного вызова angularjs jsonp?
Я должен получить данные json с какого-то сайта через angularjs. я все сделал правильно по ссылке ниже.
Моя проблема в том, что api не позволяет параметру обратного вызова иметь какой-либо символ, кроме букв, цифр и _. И так как angular заменяет JSON_CALLBACK на что-то вроде 'angular.обратный звонок._0', это не допускается.
Как я могу настроить это значение для angularjs?
Парсинг JSONP $http.ответ jsonp() в угловатый.js
Спасибо
1 ответ:
Имена обратного вызова жестко закодированы здесь httpBackend.js#L55 , так что вы не можете настроить его.
Но вы можете написать перехватчик HTTP, чтобы обойти его следующим образом:
.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); } }; })
Пример плунжера: http://plnkr.co/edit/S5K46izpIxHat3gLqvu7?p=preview
Надеюсь, это поможет.