Join the Stack Overflow Community
Stack Overflow is a community of 6.7 million programmers, just like you, helping each other.
Join them; it only takes a minute:
Sign up

I have to fetch json data from some website through angularjs. i have done everything correctly according to the link below.

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

How can i custom set this value for angularjs?

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

thanks

share|improve this question
    
@runTam's solution worked for me.... working plunkr here: plnkr.co/edit/EyFvXx?p=preview – naterchrdsn Dec 19 '14 at 21:01
up vote 10 down vote accepted

The callback names are hard-coded here httpBackend.js#L55, so you can't config it.

But, you could write a HTTP interceptor to workaround 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);
    }
  };
})

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

Hope this helps.

share|improve this answer
    
Tested and working with a directive I made using the API the OP referenced: plnkr.co/edit/EyFvXx?p=preview – naterchrdsn Dec 19 '14 at 21:01
    
Unfortunately won't work when requesting two resources in parallel. The callback id won't be incremented in between and the callback of the second request won't be defined anymore: Uncaught ReferenceError: angular_callbacks_0 is not defined (see plnkr.co/edit/TVnta6lZeaAaVC7Z8vBl) – JimmyBlu May 19 '16 at 18:39

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.