2016-04-15 11 views
0

Ich versuche, jQuery XHR zu verwenden, um eine einfache GET-Anfrage an eine API bei Zillow zu senden. Ich kann in meinem Browser und in Postman sehen, dass die Anfrage korrekt zurückkommt. Ich habe meinen API-Schlüssel unten zensiert - aber die Anfrage könnte nicht einfacher sein.Kein Access-Control-Allow-Origin-Header auf der Ressource des API-Endpunkts

$.ajax({ 
      url: 'http://www.zillow.com/webservice/GetMonthlyPayments.htm?zws-id=<APIKEY_GOES_HERE>&zip=89509&output=json&price=300000&down=25', 
      success: function(data){alert('done');}, 
      dataType: 'json' 
      }); 

Ich kann in der Konsole sehen, dass es wieder mit dem Standard-domänenübergreifender Fehler kommt, über die Local Host oder wenn auf dem Server.

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '<MY-DOMAIN>' is therefore not allowed access. 

Response Headers

Ich habe viele APIs auf diese Weise verwendet, und ich verstehe nicht - es ist so dumm wirklich? Sie setzen eine API frei, erlauben aber keine CORS? Das ergibt für mich keinen Sinn und ich denke, ich muss etwas Offensichtliches vermissen.

  • Muss ich aufgrund irgendeines obskuren Zustands am Ende des Fluges prüfen?
  • Wenn sie CORS wirklich nicht erlauben, kann mir jemand helfen, den Zweck dieses Endpunkts zu verstehen?
  • Die API ist sehr schön dokumentiert here.

Dank Stack. Schätze deine Hilfe.


Edit: Wenn Sie möchten, um zu sehen, was ich sehe, kann man get an API key ohne Schweiß.

+0

Es gibt viele APIs ohne CORS da draußen. Sie sind nicht dazu bestimmt, direkt von Javascript benutzt zu werden, oder es ist ihnen egal. Einige verstehen das Konzept nicht einmal. Ich habe eine ziemlich berühmte Webseite gefragt, um ihre API CORS zur Verfügung zu stellen, und sie haben mich zweimal gefragt, ob es funktioniert, aber nicht. Ich musste ihnen sagen, wie man es selbst von einem Browser aus testet. –

+0

Danke Siderite. Sie haben Recht - um eine Lösung dafür zu entwickeln, muss ich eine Server-Methode auf meiner Domain einrichten, die als Proxy fungiert. Mist. – jdbiochem

Antwort

1

Es sieht so aus, als hätten sie CORS verboten. Sie müssen Ihren eigenen Server einrichten, der Zillows Endpunkt erreicht, und AJAX verwenden, um diese Route auf Ihrem eigenen Server zu erreichen. Ich glaube, dass der Zweck dies ist, CSRF zu unterdrücken, also werden die Cookies des Benutzers nicht nach Zillow gesendet, da es durch Ihren Server geht, anstatt direkt vom Browser zu Zillow zu gehen.

+0

Das ist richtig. Schändlicherweise konnte ich eine weitere Stapelfrage identifizieren, die genau dasselbe für die Zillow-API verlangt. Ich werde Ihrem Vorschlag folgen und eine Server-Methode erstellen, die die Seite abruft. – jdbiochem