You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YouTube Autocomplete API调用失败:CORS及数据解析问题求助

解决YouTube Autocomplete API的CORS及JSON解析问题

问题本质

直接在前端调用suggestqueries.google.com的自动补全接口会触发浏览器CORS限制,因为该接口没有配置允许localhost:3000跨域访问的响应头。添加{mode: 'no-cors'}后,浏览器返回的是不可读取的不透明响应,所以调用data.json()时会报"Unexpected end of input"错误——根本读不到内容自然解析失败。

可行解决方案

1. 用后端代理(推荐生产环境使用)

前端请求自己的后端服务,由后端去调用YouTube的接口,再把结果返回给前端。后端不受浏览器CORS规则限制,以Node.js/Express为例:

后端代码:

const express = require('express');
const axios = require('axios');
const app = express();
const port = 4000;

// 代理接口
app.get('/api/youtube-suggest', async (req, res) => {
  const query = req.query.q;
  const apiUrl = `http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q=${encodeURIComponent(query)}`;
  try {
    const response = await axios.get(apiUrl);
    res.json(response.data);
  } catch (err) {
    res.status(500).send('请求失败');
  }
});

app.listen(port, () => {
  console.log(`代理服务运行在 http://localhost:${port}`);
});

修改后的前端代码:

const getSearchSuggetsions = async (text) => {
  const res = await fetch(`http://localhost:4000/api/youtube-suggest?q=${encodeURIComponent(text)}`);
  const data = await res.json();
  console.log(data);
};

2. 改用官方YouTube Data API

Google提供了正规的YouTube Data API,需要先在Google Cloud Console申请API密钥并启用YouTube Data API服务。示例代码:

const API_KEY = '你的API密钥';
const getSearchSuggetsions = async (text) => {
  const apiUrl = `https://www.googleapis.com/youtube/v3/search?part=snippet&q=${encodeURIComponent(text)}&type=video&key=${API_KEY}`;
  const res = await fetch(apiUrl);
  const data = await res.json();
  // 提取视频标题作为搜索建议
  const suggestions = data.items.map(item => item.snippet.title);
  console.log(suggestions);
};

3. 临时使用JSONP(仅推荐本地测试)

该接口支持JSONP格式,通过动态创建<script>标签绕过CORS限制:

const getSearchSuggetsions = (text) => {
  const script = document.createElement('script');
  script.src = `http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q=${encodeURIComponent(text)}&callback=handleSuggest`;
  document.body.appendChild(script);
};

// 全局回调函数
function handleSuggest(data) {
  console.log(data);
  // 用完后移除动态创建的script标签
  const script = document.querySelector(`script[src*="suggestqueries.google.com"]`);
  if (script) document.body.removeChild(script);
}

注意:JSONP仅支持GET请求,且存在XSS安全风险,不适合生产环境使用。

内容的提问来源于stack exchange,提问作者Tarun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:32:42