从 curl 到 jQuery 的 $.ajax() 函数

Posted

技术标签:

【中文标题】从 curl 到 jQuery 的 $.ajax() 函数【英文标题】:From curl to jQuery’s $.ajax() Function 【发布时间】:2016-12-02 08:08:36 【问题描述】:

由于平台限制,我正在尝试将 curl 代码从名为 TextRazor 的 API 转换为 jquery 的 AJAX。我从社区的类似问题中尝试了许多解决方案,但似乎无法取回任何数据(通过警报对话框)。如果有关系 从调用 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 代码如下所示:

$.ajax(
url: "https://api.textrazor.com/",
type: "POST",
dataType: 'json',
data:  
   x-textrazor-key: "YOUR_API_KEY",
   extractors: "entities,entailments",
   text:"Spain's stricken Bankia expects to sell..." 
,
success:function(data) 
    alert(JSON.stringify(data));
,error: function(xhr) 
    alert("<some error>");
    console.error(xhr.responseText);
);

如果有帮助,这里是 jsfiddle 的链接:jsfiddle.net

感谢您的支持!

【问题讨论】:

【参考方案1】:

这看起来很接近我,但是您将标头放入 POST 正文中。我觉得应该是下面这个。 (请注意,您还需要在 'x-textrazor-key' 周围加上引号,否则其中的破折号将被解释为减法。)

$.ajax(
    url: "https://api.textrazor.com/",
    type: "POST",
    dataType: 'json',
    headers: 
       'x-textrazor-key': "YOUR_API_KEY"
    ,
    data:  
        extractors: "entities,entailments",
        text: "Spain's stricken Bankia expects to sell..." 
    ,
    success: function (data) 
        alert(JSON.stringify(data));
    ,
    error: function (xhr) 
        alert("<some error>");
        console.error(xhr.responseText);
    
);

这里当然可能还有其他问题。 (例如,API 可能不支持跨域请求。)您需要查看浏览器开发人员工具中的网络选项卡以了解实际发生的情况。

【讨论】:

【参考方案2】:

我认为您必须将“x-textrazor-key:YOUR_API_KEY”作为附加标头传递

$.ajax(
url: "https://api.textrazor.com/",
type: "POST",
dataType: 'json',
beforeSend: function(xhr)xhr.setRequestHeader('x-textrazor-key', 'YOUR_API_KEY');,
data:  
   extractors: "entities,entailments",
   text:"Spain's stricken Bankia expects to sell..." 
,
success:function(data) 
    alert(JSON.stringify(data));
,error: function(xhr) 
    alert("<some error>");
    console.error(xhr.responseText);
);

【讨论】:

【参考方案3】:
data:  
   x-textrazor-key: "YOUR_API_KEY",

jQuery 中的 data: 括号表示您希望将该数据作为 POST 发送,而您需要将 API 密钥作为标头发送。

将此字段添加到您的代码中(在 URL 之后):

headers: "x-textrazor-key": "YOUR_API_KEY"

【讨论】:

以上是关于从 curl 到 jQuery 的 $.ajax() 函数的主要内容,如果未能解决你的问题,请参考以下文章

将 cURL 转换为 jQuery AJAX [重复]

从 jquery $.ajax 到 angular $http

使用 Laravel 返回令牌不匹配的简单 ajax 搜索

从 cURL 发帖:HTTP_X_REQUESTED_WITH

从节点 JavaScript 返回到 jQuery 的 Ajax 调用落在错误函数上

将二进制数据从 jQuery ajax 发送到 PHP