可能性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”中的代码,通过将其保存在 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
Accept-Language: en-US,en
Accept-Charset: ISO-8859-1,UTF-8
Cache-Control: no-cache[CRLF]
Referer: http://web-sniffer.net/[CRLF]
<VID>
吗? 你的 VID 是否有效? 你是否尝试将查询字符串写入data
参数而不是在url
参数中提交到精确 URL? - Marc