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

如何跨域展示其他站点的JSON数据?

解决跨域CORS请求被拦截的问题

看起来你碰到了浏览器同源策略导致的CORS(跨域资源共享)限制问题,这是浏览器为了安全默认实施的规则,下面给你几个可行的解决思路:

1. 让目标服务器配置CORS响应头(推荐的生产环境方案)

这是最合规且长期有效的解决方式。需要目标API服务器(https://dev.truthify.com)在响应中添加Access-Control-Allow-Origin头,允许你的前端域名访问:

  • 如果服务器是你自己维护的,可以在后端框架(比如Django、Express、Spring等)里配置CORS规则,或者在Nginx这类反向代理中添加响应头:
    add_header Access-Control-Allow-Origin "你的前端域名";
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    
  • 如果服务器不是你控制的,需要联系该API的管理员,请求他们将你的域名加入允许访问的列表。

2. 搭建自己的代理服务器(开发/生产都适用)

浏览器的同源策略只限制前端页面发起的请求,服务器之间的请求不受这个限制。你可以搭建一个简单的中间代理,前端请求你的代理服务器,代理再去请求目标API,最后把结果返回给前端。

比如用Node.js + Express快速写一个代理示例:

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

app.get('/api/proxy-video-info', async (req, res) => {
  try {
    const response = await axios.get('https://dev.truthify.com/api/deeplink/info/bf76b0bd-5210-4c55-af23-c9689ffec536/');
    res.json(response.data);
  } catch (error) {
    res.status(error.response?.status || 500).send(error.message);
  }
});

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

然后修改前端的请求地址为你的代理地址,同时纠正代码里的小错误:

getJSON('http://localhost:3000/api/proxy-video-info', function(err, data) {
  if (err != null) {
    alert('Something went wrong: ' + err);
  } else {
    // 注意:要从data里取video对象,你之前的代码漏掉了data前缀
    result.innerText = data.video.name;
  }
});

3. 开发环境临时禁用CORS(仅用于本地调试)

如果你只是在本地开发测试,可以临时关闭浏览器的CORS限制,但绝对不能用于生产环境,这会带来严重的安全风险。

以Chrome为例,先关闭所有Chrome窗口,再用以下命令启动:

# Windows系统
chrome.exe --disable-web-security --user-data-dir="C:/ChromeDevSession"

# Mac系统
open -n -a "Google Chrome" --args --disable-web-security --user-data-dir="/tmp/ChromeDevSession"

4. 尝试JSONP(如果API支持的话)

JSONP是一种老旧的跨域方案,只适用于GET请求,且需要目标API支持返回JSONP格式的数据(即把JSON数据包裹在指定的回调函数里)。如果目标API支持,你可以这样修改请求:

function handleVideoData(data) {
  result.innerText = data.video.name;
}

const script = document.createElement('script');
script.src = 'https://dev.truthify.com/api/deeplink/info/bf76b0bd-5210-4c55-af23-c9689ffec536/?callback=handleVideoData';
document.body.appendChild(script);

不过现在CORS是更主流的方案,JSONP只在老项目或特定场景下使用。


内容的提问来源于stack exchange,提问作者Marko Petković

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:58:35