可能性 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 文件中来隐藏它。
更新/注意:仅传递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]