2014-06-06 26 views
8

Próbuję uzyskać niektóre dane z interfejsu API z żądaniem JSONP, ale za każdym razem otrzymuję 404. Zakładam, że mój adres URL jest nieprawidłowy, ale mogę ręcznie wpisać adres URL w Chrome i uzyskać żądaną odpowiedź. Moje $http.jsonp żąda zawsze błędów z 404 wyświetlanymi w moim console.log w wywołaniu błędu.Żądanie JSONP daje 404 w Angular app

Oto kod, który sprawia, że ​​wniosek:

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

panel Sieć Chrome Dev Tools pokazuje 200 odpowiedzi na wniosek z ciałem odpowiedzi chciałbym się spodziewać, ale nie trafia do kątowa z jakiegokolwiek powodu.

+1

Widziałeś już to? http://stackoverflow.com/questions/19916362/angularjs-how-to-make-a-jsonp-request – klode

+0

@klode Widziałem to. Być może API nie obsługuje żądań JSONP. Czy to jest możliwe? – raddevon

+0

Mam dokładnie ten sam problem. – Miraage

Odpowiedz

5

Po rozmowie z niektórymi programistami back-end wygląda na to, że interfejs API, którego używam, nie obsługuje JSONP. Z tego powodu otrzymałem 404 na ten wniosek.

+2

to naprawdę straszny sposób, aby kątowo radzić sobie z tego rodzaju błędem. podanie 404 jest mylące. co powiesz na to: "hej, nie ma żadnej ważnej funkcji do wywoływania skryptu" i wszyscy bylibyśmy na naszej wesołej drodze upewniając się, że odpowiedź jest ważna dla jsonp – chrismarx

+0

, ale jak to działało w przeglądarce? – Azmeer

1

Czy możesz podać dokładną zawartość window.console.log (siteNameUrl) tuż przed zapytaniem o ajax i podać wynik?
Może spróbuj siteNameUrl.toString() tylko w przypadku, gdy jest to problem parsowania
wydaje się, że nie jesteś zainteresowanie dokładnie tej samej zawartości ...
Przymierz nawet wprowadzenie ciężko napisane siteNameUrl używasz jako siteNameUrl = "www.someapi/api"

+0

Nie jestem pewien, czy mogę publiczny adres URL, ale próbowałem zakodować wartość w zmiennej. To też nie działa w ten sposób. W tym momencie uważam, że interfejs API nie obsługuje żądań JSONP. Czy to jest możliwe? Czy musisz celowo dodawać obsługę JSONP do interfejsu API? – raddevon

+1

Tak, będziesz potrzebować innej implementacji: [...] "Pamiętaj, że aby JSONP działał, serwer musi wiedzieć, jak odpowiedzieć za pomocą wyników sformatowanych w formacie JSONP" http://pl.wikipedia.org/wiki/JSONP – SamiX