2016-08-05 3 views
0

Я пытаюсь преобразовать curl-код из API под названием TextRazor в AJAX XMLHttp из-за ограничений платформы. Я попробовал много решений от подобных вопросов со стороны сообщества, но, похоже, не может получить никаких данных или просто «400: Bad Request». Если это имеет значение, из документации, вызывающей API выглядит следующим образом:От CURL до 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/ 

Мой текущий код AJAX XMLHttp выглядит следующим образом:

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

Спасибо за вашу поддержку!

ответ

0

Вы работаете в same origin policy.

Поскольку вы делаете запрос с кросс-началом и добавляете пользовательский заголовок, браузер делает preflight OPTIONS request, прежде чем он сделает запрос, о котором вы просите.

Сервер, на который вы делаете запрос, не готов ответить на запрос OPTIONS, поэтому он бросает вам 400 обратно.

Чтобы это исправить:

  • Они должны поддерживать CORS
  • Они должны обеспечивать альтернативные средства, чтобы получить данные, такие как JSONP (не рекомендуется, мы имеем CORS сейчас)
  • Вы не должны сделать запрос непосредственно на их сервер из браузера
Смежные вопросы