2014-07-21 17 views
7

Sto provando a tirare i dati verso il basso tramite JSONP con angolare. Sono rimasto perplesso sul motivo per cui non funzionerà in determinate situazioni.JSONP angolare che restituisce JSON_CALLBACK non è definito errore

Sono stato in grado di tirare con successo in questo campione JSONP:

https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Brian

Ma quando copiati in un secchio su S3, continuo a ricevere questo errore:

Uncaught ReferenceError: JSON_CALLBACK is not defined

Il file è pubblico e posso accedervi senza problemi con $.ajax, ma non con $http.jsonp

Ho provato a cambiare il tipo MIME per il file JSON per tutti i seguenti:

  • application/json
  • application/javascript
  • application/x-javascript
  • text/plain
  • text/javascript

Nessuno di loro mi hanno permesso di effettuare una chiamata di successo attraverso il $http.jsonp Funzione

+0

"ReferenceError Uncaught: JSON_CALLBACK non è definito" - La tua domanda non è presente il codice quale ha come valore predefinito la funzione JSON_CALLBACK. – Quentin

risposta

1

Non essendo in grado di vedere il tuo codice, posso mostrarvi cosa ha funzionato per me un paio di giorni fa, quando si lavora con JSONP e angolare:

controller('YourCtrl', ['$scope', '$http', function($scope, $http) { 
var url = "https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Brian" 
$http.jsonp(url) 
    .success(function(data) { 
     $scope.greeting = data; 
    }); 
}]) 

Poi nella vista, qualcosa di simile dovrebbe funzionare:

<div ng-controller="YourCtrl"> 
{{greeting.name}} <br /> 
{{greeting.salutation}} 
</div> 

Se questo non risponde alla tua domanda, prova a incollare nel codice.

+0

[Plunkr] (http://plnkr.co/edit/ESETufLS1nkgrsnYlNGl?p=preview) –

+0

Questo è esattamente quello che sto facendo. – Brian

8

Ok, quindi questo è molto strano, ma alla fine ho ottenuto di lavorare cambiando l'involucro di richiamata nel JSONP JSON_CALLBACK(.......)-angular.callbacks._0 perché questa è la funzione di callback angolare continuava a cercare di chiamare invece di JSON_CALLBACK ... un comportamento molto strano .

+0

Qual è la versione di angular.js che stai utilizzando? – runTarm

+4

Il '$ http.jsonp' sostituirà il' JSON_CALLBACK' in url con 'angular.callbacks. {{CallbackId}}' automaticamente. Per qualche ragione, non è riuscito a farlo nel tuo caso. – runTarm

+0

Sì, comportamento molto strano, ma comunque hai salvato la mia giornata! –

0

Brian Ho scoperto un metodo per assicurarsi che rileva ?callback=JSON_CALLBACK. Quando si richiede per l'URL, invece di mettere il tutto dentro, è possibile scrivere in questo modo, e rileva il 100%:

$http({ 
    method: 'JSONP', 
    url: 'https://angularjs.org/greet.php' + '?callback=JSON_CALLBACK' + '&name=Brian"' 
}); 
-1

cambiare la risposta dal server

angular.callbacks._0 ({"name":"Super Hero","salutation":"Namaste","greeting":"Namaste Super Hero!"}); 

invece di

JSON_CALLBACK ({"name":"Super Hero","salutation":"Pryvitannie","greeting":"Pryvitannie Super Hero!"}); 
0

il problema è nella tua risposta riposo o http json file sul secchio, hanno bisogno di essere dinamico con il parametro get (richiamata).

È necessario rilevare il parametro di richiamata e concatenre allo json per ottenere lo jsonp.

Per esempio:

1) http://example.com?callback=JSONP_CALLBACK 
2) http://example.com?callback=OtherCallback 
3) http://example.com?callback=JSONP_CALLBACK_OTHER 

ottenere il parametro GET "callback" e rendere il vostro riposo in questo modo:

1) JSONP_CALLBACK({YOUR REST INFO}) 
2) OtherCallback({YOUR REST INFO}) 
3) JSONP_CALLBACK_OTHER({YOUR REST INFO})