как настроить имя обратного вызова angularjs jsonp?


Я должен получить данные json с какого-то сайта через angularjs. я все сделал правильно по ссылке ниже.

Моя проблема в том, что api не позволяет параметру обратного вызова иметь какой-либо символ, кроме букв, цифр и _. И так как angular заменяет JSON_CALLBACK на что-то вроде 'angular.обратный звонок._0', это не допускается.

Как я могу настроить это значение для angularjs?

Парсинг JSONP $http.ответ jsonp() в угловатый.js

Спасибо

1 9

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

Надеюсь, это поможет.