2016-05-31 11 views
0

Ich habe eine einfache MongoDB, die temporäre Dummy-Daten speichert, die unternehmensweit zugänglich sind.

Ich kann die Daten erfolgreich über die folgende Abfrage:

$http.jsonp("http://my_server/my_database/my_collection/?callback=JSON_CALLBACK&jsonp=angular.callbacks._0") 
      .then(getServersComplete) 
      .catch(getServersFailed); 

     function getServersComplete(response) { 
      var test = response.data; 
      //do stuff 
     } 

     function getServersFailed(error) { 
      $log.error('XHR Failed for getServers.\n' + angular.toJson(error.data, true)); 
     } 

Mein Problem ist, dass Mongo der REST-Schnittstelle die Abfrage-Parameter jsonp=my_callback erwartet, während Angular des $http Service wird die Abfrageparameter callback=JSON_CALLBACK erwartet. Angular übersetzt dann JSON_CALLBACK in seine eigene Funktion, in diesem Fall angular.callbacks._0 (aber wenn es mehr Rückrufe auf der Seite gäbe, wäre es angular.callbacks._1, angular.callbacks._2, etc.). Wie kann ich Mongo mitteilen, welchen Callback Angular dynamisch erstellt hat?

Antwort

0

implementiert ich die jsonpInterceptor wie hier beschrieben: How to Custom Set AngularJS JSONP Callback Name

.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); 
} 
    }; 
}) 

His Plunker