2014-06-06 12 views
8

Sto cercando di ottenere alcuni dati da un'API con una richiesta JSONP, ma ottengo un 404 ogni volta. Immagino che il mio URL sia sbagliato, ma posso inserire manualmente l'URL in Chrome e ottenere la risposta desiderata. La mia richiesta $http.jsonp ha sempre errori con un 404 visualizzato nel mio console.log nella richiamata di errore.La richiesta JSONP fornisce 404 nell'app Angolare

Ecco il codice che effettua la richiesta:

$scope.fetchDefaultLabel = function() { 
     // This code will eventually set the label to the site name when the endpoint field blurs. 
     // Currently not working properly. 
     if ($scope.endpoint) { 
     var baseUrl = $scope.endpoint.split('/')[2]; 
     var siteNameUrl = 'http://' + baseUrl + '/api/sitename.json?callback=JSON_CALLBACK'; 
     console.log(siteNameUrl); 
     $http.jsonp(siteNameUrl) 
      .success(function(data, status, headers, config) { 
      $scope.label = data; 
      }) 
      .error(function(data, status, headers, config) { 
      console.log('Data: ' + data); 
      console.log('Status: ' + status); 
      console.log('Headers: ' + headers); 
      console.log('Config: ' + config); 
      }); 
     } 
    }; 

pannello Network di Chrome Dev Tools mostra una risposta 200 per la richiesta con il corpo della risposta mi aspetterei, ma che non è arrivare a angolare per qualsiasi motivo.

+1

hai già visto questo? http://stackoverflow.com/questions/19916362/angularjs-how-to-make-a-jsonp-request – klode

+0

@klode Ho visto quello. È possibile che l'API non supporti le richieste JSONP. È possibile? – raddevon

+0

Ho esattamente lo stesso problema. – Miraage

risposta

5

Dopo aver parlato con alcuni sviluppatori back-end, sembra che l'API che sto utilizzando non supporti JSONP. Questo è il motivo per cui stavo ottenendo un 404 su quella richiesta.

+2

questo è davvero un modo terribile per angolare per gestire questo tipo di errore. dare un 404 è confuso. che ne dici semplicemente "hey, non c'è una funzione valida per chiamare il copione" e saremmo tutti sulla buona strada facendo in modo che la risposta fosse valida per jsonp – chrismarx

+0

ma come funzionava sul browser? – Azmeer

1

è possibile fornire il contenuto esatto di window.console.log (siteNameUrl) appena prima della richiesta ajax e fornire il risultato?
Forse provare un siteNameUrl.toString() nel caso in cui si tratta di un problema di analisi
sembra che non si sta chiedendo la stessa url ...
Prova anche mettendo duro scritto il siteNameUrl si sta utilizzando come siteNameUrl = "www.someapi/api"

+0

Non sono sicuro di poter rendere pubblico l'URL, ma ho provato a codificare un valore nella variabile. Neanche sembra funzionare in questo modo. A questo punto, credo che l'API non supporti le richieste JSONP. È possibile? Devi aggiungere intenzionalmente il supporto JSONP a un'API? – raddevon

+1

Sì, è necessaria un'implementazione diversa: [...] 'Nota che per il funzionamento di JSONP, un server deve sapere come rispondere con i risultati in formato JSONP' http://en.wikipedia.org/wiki/JSONP – SamiX