如何使用jQuery向Dictionary.com的REST API发出AJAX请求
How to make an AJAX request to Dictionary.com's REST API using jQuery?
Dictionary.com 完全没有提供有关如何从中获取数据的文档。 我正在尝试使用jQuery的ajax请求,但这些请求不起作用。
他们提供了一个我应该能够使用的 URL。 我将在下面提供这个。
http://api-pub.dictionary.com/v001?vid=<VID>&type=random&site=dictionary
它们还提供了一把钥匙,我假设我把它放在<VID>
的位置。
有人可以告诉我我做错了什么吗? 我将在下面提供我正在使用的代码:
$("#btnGetData").click(function() {
$.ajax({
url: "http://api-pub.dictionary.com/",
type: "GET",
data: "v001?vid=<VID>&type=random&site=dictionary",
success: function() { alert("success") },
});
});
有人可以告诉我我做错了什么吗?
您没有正确传递数据。此外,请求网址http://api-pub.dictionary.com/v001
。试试这个:
$("#btnGetData").click(function() {
$.ajax({
url: "http://api-pub.dictionary.com/v001",
type: "GET",
dataType: "jsonp", //For external apis
data: {"vid": <VID>,
"type":"random"
"site": "dictionary"},
success: function() {
alert("success") },
});
});
更新:也许您被与@thordarson注释相同的来源策略阻止,在这种情况下添加: dataType: "jsonp"
您的 Ajax 调用。
可能性 1
您无权访问他们的 API。根据他们的 API 页面,他们对谁可以访问他们的 API 非常挑剔。
我们对我们的 API 合作伙伴有选择性,并批准使用以及 根据具体情况制定条款。如果您有兴趣使用 我们的API,请直接与我们联系[...]。
可能性2
您被同源策略阻止。浏览器通常对 JavaScript 跨不同域发出的请求非常严格。可以使用跨源资源共享绕过此操作。这需要配置您请求的服务器,因此在这种情况下它是不可行的。
最好的办法是创建一个请求 URL 的服务器端脚本,然后使用 AJAX 请求文件。
在 PHP 中的示例,我们称之为request_dictionary.php
:
<?php
$vid = "Your API key";
$type = $_GET['type'];
$site = $_GET['dictionary'];
$request_url = "http://api-pub.dictionary.com/v001?vid=$vid&type=$type&site=$site";
echo file_get_contents($request_url);
?>
注意:您可能需要更改此设置以满足您的需求(错误处理、404、缓存等)。此代码未经测试。
然后更改你的jQuery,以便它请求你的文件。
$("#btnGetData").click(function() {
$.ajax({
url: "/request_dictionary.php",
type: "GET",
data: "type=random&site=dictionary",
success: function() { alert("success") },
});
});
警告
在没有代理的情况下使用 AJAX 调用(如可能性 2 中所述)将公开您的 API 密钥。这违反了Dictionary.com的API服务条款。
2.1 Dictionary.com 将为客户应用程序分配并交付用于访问 API 的应用程序密钥。所有呼叫必须 包含此类应用程序密钥。应用程序密钥是唯一的 与每个客户应用程序以及所有版本、升级相关联 及其更新。应用程序密钥是机密信息 如本条款和条件中所定义。您必须维护和保持 应用程序密钥以安全、嵌入式的方式进行,任何人都无法访问 第三方。应用程序密钥可完全由 Dictionary.com 撤销 在任何时候。Dictionary.com 可能会阻止访问 API 的尝试 无效或已吊销的应用程序密钥。
我已经更新了可能性 2 中的代码,以通过将 API 密钥保存在 PHP 文件中来隐藏 API 密钥。
更新/注意:仅传递dataType: 'jsonp'
以启用跨源调用是不够的。响应服务器需要使用包含您的域(或包含您的域的规则)的 Access-Control-Allow-Origin
标头进行响应。作为请求者,任何此类配置都无法控制。
更新/注意2:在调查从您的请求URL返回的标头后,我看不到Access-Control-Allow-Origin
的证据。这意味着即使您可以访问他们的 API,也无法使用 AJAX 访问它。完整标题如下:
GET /v001?vid=%3CVID%3E&type=random&site=dictionary HTTP/1.1[CRLF]
Host: api-pub.dictionary.com[CRLF]
Connection: close[CRLF]
User-Agent: Web-sniffer/1.0.44 (+http://web-sniffer.net/)[CRLF]
Accept-Encoding: gzip[CRLF]
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[CRLF]
Accept-Language: en-US,en;q=0.8[CRLF]
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
Cache-Control: no-cache[CRLF]
Referer: http://web-sniffer.net/[CRLF]
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 在同一ip但不同端口上使用Rest API
- 从ANGULAL连接到REST API
- 如何在使用loopback REST API时更改gulp-angular项目的端口号
- Cross domain - REST API
- 更改REST API服务器的最佳实践
- DreamFactory REST API POST休息/用户/会话请求总是在IE9中返回错误
- 解析推送通知-如何从REST或JS API跟踪打开
- REST API node.js
- 数据未显示 - 余烬 js - Rest API
- 登录后无法使用 ACS REST API 发送推送通知
- 在 Rest API 中发布调用
- REST API 服务器是否应该使用 PUT 接收 JSON 数据或普通表单数据
- 在 javascript 中保护 Azure API rest 调用
- API REST JQUERY
- 使用jQuery进行API Rest调用
- 如何在SAILJS的API REST中使用方法过滤器搜索
- 使用Javascript实现API rest客户机在添加授权标头时返回404
- 维护多个版本的 API Rest