调用Python接口返回JSON时出现Promise拒绝及语法错误求助
问题排查方案
1. 先确认Python脚本是否在服务器环境运行
- 直接在浏览器地址栏输入
readjobs.py的路径,如果看到的是脚本源码(比如开头的import mys...),说明你只是本地打开HTML文件,根本没让Python脚本运行起来。静态HTML本地打开时,浏览器会把.py文件当普通文本返回,不会执行它。必须用能运行Python脚本的Web服务器来部署。
2. 检查服务器配置,确保能执行Python脚本
- 用Python自带的简易服务器处理CGI的话,按下面步骤来:
- 把
readjobs.py放到cgi-bin目录里 - 给脚本加可执行权限:
chmod +x readjobs.py(Linux/macOS),Windows可以跳过这步 - 启动服务器时启用CGI模式:
python3 -m http.server --cgi 8000 - HTML里调用的路径改成
/cgi-bin/readjobs.py
- 把
- 脚本开头必须加shebang行,指定Python解释器:
#!/usr/bin/env python3
3. 确保Python脚本只输出纯JSON
- 脚本里不能有任何额外输出,比如调试用的
print语句、模块导入的警告,必须只返回JSON内容。 - 一定要先输出正确的HTTP头,再输出JSON:
print("Content-Type: application/json") print() # 这里必须空一行,分隔HTTP头和JSON内容 # 然后输出你的JSON数据 - 自己手动运行脚本测试:
python3 readjobs.py,看输出是不是只有纯JSON,没有其他杂字符。
4. 前端请求要做好错误处理
- 别给GET请求乱加
Content-Type: application/json,没必要 - 给Promise加
catch捕获错误,避免出现未处理的拒绝:fetch('/cgi-bin/readjobs.py') .then(response => { if (!response.ok) throw new Error('请求失败'); return response.json(); }) .then(data => console.log(data)) .catch(err => console.error('错误:', err));
5. 排查跨域问题
- 本地测试时,HTML必须通过服务器访问(比如
http://localhost:8000/index.html),不能用file://协议直接打开。 - 如果确实是跨域场景,Python脚本要加CORS头:
print("Access-Control-Allow-Origin: *") print("Content-Type: application/json") print()
内容的提问来源于stack exchange,提问作者erdomester
相关产品推荐
相关产品推荐

