从CURL到AJAX XMLHttp

时间:2016-08-05 22:57:49

标签: javascript ajax curl xmlhttprequest

由于平台限制,我正在尝试将curl代码从名为TextRazor的API转换为AJAX XMLHttp。我已尝试过社区类似问题的许多解决方案,但似乎无法获得任何数据或只是“400:错误请求”。如果重要,从调用API的文档看起来像这样:

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

感谢您的支持!

1 个答案:

答案 0 :(得分:0)

您正在遇到preflight OPTIONS request

由于您正在制作跨源请求并添加自定义标头,因此浏览器在发出您要求的请求之前会生成{{3}}。

您提出请求的服务器不准备响应OPTIONS请求,因此它会向您抛出400。

解决此问题:

  • 他们应该支持CORS
  • 他们应该提供另一种方法来获取JSONP等数据(不推荐,我们现在有CORS)
  • 您不应该通过浏览器直接向其服务器发出请求