如何使用jQuery向Dictionary.com的REST API发出AJAX请求

How to make an AJAX request to Dictionary.com's REST API using jQuery?

本文关键字:API REST 发出 AJAX 请求 com 何使用 jQuery Dictionary      更新时间:2023-09-26

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]