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") },
});
});
有人可以告诉我我做错了吗?
答案 0 :(得分:4)
您没有正确传递数据。请求网址也是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") },
});
});
更新:也许您被same origin policy阻止为@thordarson注释,在这种情况下添加:
dataType: "jsonp"
到你的ajax电话。
答案 1 :(得分:3)
您无权访问其API。根据他们的API page,他们非常谨慎地选择了谁可以访问他们的API。
我们对API合作伙伴有选择性并批准使用 根据具体情况制定条款。如果您有兴趣使用 我们的API,请直接与我们联系[...]。
你被same origin policy阻止了。浏览器通常对JavaScript在不同域中发出的请求非常严格。这可以使用Cross-origin resource sharing绕过。这需要配置您要求的服务器,因此在这种情况下它不可行。
最好的办法是创建一个服务器端脚本,请求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);
?>
注意:您可能需要更改此选项以满足您的需求(错误处理,404s,缓存等)。 此代码未经测试。
然后更改您的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's API Terms of Service。
2.1 Dictionary.com将为您的客户应用程序分配并提供应用程序密钥以访问API。所有电话都必须 包含此类应用程序密钥应用程序密钥是唯一的 与每个客户应用程序和所有版本,升级相关联 及其更新。 应用程序密钥是机密信息 这些条款和条件中定义的。你必须保持并保持 应用程序密钥以安全,嵌入的方式,任何人都无法访问 第三方。应用程序密钥可由Dictionary.com完全撤销 随时。 Dictionary.com可能会阻止尝试访问API 无效或已撤销的应用程序密钥。
我已经更新了 possible 2 中的代码,通过将其保存在PHP文件中来隐藏API密钥。
更新/注意:仅仅通过dataType: 'jsonp'
启用跨域调用是不够的。响应服务器需要使用包含您的域(或包含您的域的规则)的Access-Control-Allow-Origin
标头进行响应。任何此类配置都不在您的手中作为请求者。
更新/注2:在调查请求网址中返回的标头后,我看不到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]