2 Stimmen

Angular $http.json Versprechen gibt Fehler zurück, obwohl ich die Antwort sehen kann

Ich bin ziemlich neu im Umgang mit http-Promise-Objekten.

Ich verwende Angular JS, um Json von einer API http://www.asterank.com/api zurückzugeben.

Ich habe einen Angular-Controller, der den Aufruf wie folgt macht:

  $http.jsonp('http://www.asterank.com/api/asterank?query={%22e%22:{%22$lt%22:0.1},%22i%22:{%22$lt%22:4},%22a%22:{%22$lt%22:1.5}}&limit=1&callback=JSON_CALLBACK').
success( function(data) {
  console.log('großer Erfolg');
}).error( function(r,t,et){
  console.log(r);
  console.log(t);
  console.log(et);
});

Wenn ich den Netzwerkmonitor von Chrome überprüfe, sehe ich die Antwort:

HTTP/1.1 200 OK
Date: Sun, 06 Oct 2013 19:06:26 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Server: gunicorn/18.0
Set-Cookie: session=eyJkaXNjb3Zlcl9maXJzdF90aW1lIjpmYWxzZX0.BTNGMg.eF89vHEeIpLH8sZiJOwCAJEjPhA; HttpOnly; Path=/
Content-Encoding: gzip

Aber ich sehe die Fehlermethode ausgelöst werden, nie den Erfolg :(

Liegt das einfach daran, dass der Server JSONP nicht unterstützt? Wie greifen Sie auf die Daten dieser APIs zu, wenn sie JSONP nicht unterstützen, aber JSON unterstützen?

Eine schöne Lösung gefunden:

Falls jemand auf dieses Problem stößt und wie ich EXPRESS verwende, können Sie einfach eine kleine API auf Ihrem Server erstellen, indem Sie dies verwenden:

https://npmjs.org/package/request

Hier muss ich nicht einen ganzen Proxyserver hochfahren, aber Sie können die JSON-Daten von Ihrem Server anfordern.

1voto

OZ_ Punkte 12219

Das einzige Problem hier ist, dass die Seite noch nicht einmal JSONP-Unterstützung deklariert.

Wie greifen Sie auf die Daten dieser APIs zu, wenn sie kein JSONP unterstützen, sondern JSON?

Schreiben Sie Ihre Proxy-Schicht auf dem Backend.

0voto

Norbert Pisz Punkte 3382

Versuch es so:

var url = 'http://www.asterank.com/api/asterank?query={%22e%22:{%22$lt%22:0.1},%22i%22:{%22$lt%22:4},%22a%22:{%22$lt%22:1.5}}&limit=1&callback=json_callback';

$http({method: 'GET', url: url })
                .success(function(data,status,headers,config){
                    console.log(data);
                }).error(function(data,status,headers,config){
                    console.log('API CALL ERROR'+status);
                });
        };

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X