使用PyScript获取JSON数据遇网络错误及CORS相关疑问
问题解答
1. 错误根源
你碰到的pyodide.ffi.JsException: TypeError: NetworkError when attempting to fetch resource.,本质就是目标服务器没配置CORS跨域头。浏览器的同源策略会限制前端脚本(包括PyScript这类运行在浏览器里的代码)跨域名/端口/协议请求资源,哪怕你的JSON格式完全正确,只要服务器没返回Access-Control-Allow-Origin这类允许跨域的响应头,请求就会被浏览器拦截。你用示例链接能正常跑,就是因为示例服务器配了合法的CORS规则。
2. fetch()方法怎么选?
- 要是你熟悉JavaScript的fetch用法,直接
from js import fetch调用原生JS的fetch就行,不过返回的是JS的Response对象,得转成Python能处理的格式(比如await response.json()后转成字典)。 - PyScript自带的
pyscript.fetch是对JS fetch的封装,返回的是Python风格的Response对象,处理起来更贴合Python习惯,不用额外转换JS对象。
两者核心功能没差,选哪个全看你自己的编码习惯。
3. 必须用支持CORS的API吗?
没错,只要你的PyScript是在浏览器里运行,就必须遵守浏览器的同源策略,必须用配置了CORS头的API或资源。如果目标服务器没法改CORS配置,给你几个替代方案:
- 把JSON文件放到和你的PyScript页面同域名的服务器上(同源资源不受CORS限制)。
- 搭个后端代理服务器,让代理去请求目标JSON,再把数据返给你的PyScript(代理和前端同源,绕开CORS限制)。
- 如果JSON数据量小,直接把内容写到PyScript代码里(比如写成Python字典),省得发请求。
内容的提问来源于stack exchange,提问作者Peter M.
相关产品推荐
相关产品推荐

