2016-08-05 24 views
0

Ich versuche, den Curl-Code aus einer API namens TextRazor zu AJAX XMLHttp wegen Plattform-Einschränkungen zu konvertieren. Ich habe viele Lösungen aus ähnlichen Fragen von der Community ausprobiert, kann aber anscheinend keine Daten zurückbekommen oder nur eine "400: Schlechte Anfrage". Wenn es darauf ankommt, aus der Dokumentation der API-Aufruf sieht wie folgt aus:Von CURL nach AJAX XMLHttp

curl -X POST \ 
-H "x-textrazor-key: YOUR_API_KEY" \ 
-d "extractors=entities,entailments" \ 
-d "text=Spain's stricken Bankia expects to sell off..." \ 
https://api.textrazor.com/ 

Mein aktueller AJAX XMLHttp Code sieht wie folgt aus:

var xhttp = new XMLHttpRequest(); 
var url = "https://api.textrazor.com/"; 
var params = "extractors=entities&text=Spain's stricken Bankia expects to sell..."; 
xhttp.open("POST", url, true); 

xhttp.setRequestHeader("x-textrazor-key", "YOUR_API_KEY"); 
xhttp.setRequestHeader("Content-length", params.length); 

xhttp.onreadystatechange = function() { 
if(xhttp.readyState == 4 && xhttp.status == 200) { 
    alert(xhttp.responseText); 
} 
} 

xhttp.send(params); 

Vielen Dank für Ihre Unterstützung!

Antwort

0

Sie laufen in die same origin policy.

Da Sie eine stammverwandte Anfrage stellen und eine benutzerdefinierte Kopfzeile hinzufügen, erstellt der Browser eine preflight OPTIONS request, bevor er die Anfrage stellt, nach der Sie fragen.

Der Server, an den Sie die Anfrage stellen, ist nicht bereit, auf eine OPTIONS-Anfrage zu antworten, sodass er Ihnen eine 400 zurückwirft.

dies beheben:

  • Sie sollten CORS unterstützen
  • Sie sollten eine Alternative bedeutet, dass die Daten wie JSONP zu bekommen (nicht zu empfehlen, wir CORS haben jetzt) ​​
  • Sie sollten nicht machen die Anfrage direkt an ihren Server vom Browser