将 jquery .getJSON 转换为 ajax 异步等待 YouTube API

Posted

技术标签:

【中文标题】将 jquery .getJSON 转换为 ajax 异步等待 YouTube API【英文标题】:Convert jquery .getJSON to ajax async await for YouTube API 【发布时间】:2021-12-02 00:29:51 【问题描述】:

我正在使用 YouTube API 密钥来获取搜索数据。

const key = "[API Key]";
const url = "https://www.googleapis.com/youtube/v3/search";

$(document).ready(function () 
  const options = 
    part: ["snippet"],
    key: key,
    maxResults: 10,
    q: "developers",
  ;

  loadVids();

  function loadVids() 
    $.getJSON(url, options, function (data) 
      const videos = data.items;
      console.log(videos);
    );
  
);

它工作正常,但我想使用 vanilla javascript 将 $.getJSON() 转换为异步等待。请指导我如何做到这一点。

【问题讨论】:

有一篇文章我发现你可能会感兴趣:petetasker.com/using-async-await-jquerys-ajax 它很有用,但我不想使用 jquery。我想仅使用 vanilla javascript 获取数据 【参考方案1】:

你可以通过定义一个 Promise 函数来做到这一点:

function loadVids()
  return new Promise((resolve, reject)=>
    fetch('https://www.googleapis.com/youtube/v3/search', method: 'GET', body: options)
    .then(response => response.json())
    .then(data => 
       console.log(data));
       resolve();
     )
     .cache(err => reject());     
  );

然后等待它:

async function f1() 
   var x = await loadVids();
   //other code...

【讨论】:

它返回错误:TypeError:无法在“窗口”上执行“获取”:使用 GET/HEAD 方法的请求不能有正文。 错误很明显,但是您必须根据后端设置内容类型并区分您的数据。看看这个:***.com/a/29823632/4437464 谢谢。很有用【参考方案2】:

我找到了解决方案 不需要部分:['sn-p']。不使用它也能正常工作。

const key = "[API Key]";
const url = "https://www.googleapis.com/youtube/v3/search";

const options = 
  part: ["snippet"],
  key: key,
  maxResults: 10,
  q: "developers",
;

async function loadVids() 
  const res = await fetch(
    `$url?maxResults=$options.maxResults&q=$options.q&key=$options.key`
  );

//can also write the above line in this more sensible way
//const res = await fetch(
//   `https://youtube.googleapis.com/youtube/v3/search?maxResults=$options.maxResults&q=$options.q&key=$options.key`,
// );

  const data = await res.json();
  console.log(data);

loadVids();

更易理解的代码

const apiKey = "[API Key]";
const url = "https://www.googleapis.com/youtube/v3/search";

const options = 
  key: apiKey,
  maxResults: 10,
  q: "developers",
;

const  key, q, maxResults  = options;

async function loadVids() 
  const res = await fetch(`$url?maxResults=$maxResults&q=$q&key=$key`);
  const data = await res.json();
  console.log(data);

loadVids();

【讨论】:

以上是关于将 jquery .getJSON 转换为 ajax 异步等待 YouTube API的主要内容,如果未能解决你的问题,请参考以下文章

jQuery.getJSON(url, [data], [callback])

使用 Jquery $getJSON 如何在 Url 参数之后为 [data] 参数动态创建数据?

NodeJS 不会将数据返回给 jQuery.getJSON

将多个 JSON 文件合二为一;使用 jQuery/getJSON() 检索

jQuery中$.getJSON

如何将表头添加到使用 jQuery 中的 getJSON() 函数创建的 html 表中