POST请求遇ERR_CONNECTION_REFUSED:JS向Python传数据失败求助
问题排查与修复方案
1. 连接拒绝错误(ERR_CONNECTION_REFUSED)解决
这个错误说明前端无法连接到Flask服务,先确认两点:
- 确保Flask应用已启动成功,控制台能看到类似
* Running on http://127.0.0.1:5000的日志,未启动则先运行Python脚本。 - 若直接打开本地
index.html文件(file://协议),会触发跨域拦截。需通过Flask的render_template加载页面,即访问http://127.0.0.1:5000/打开页面,保证前后端同域。
2. JS代码错误修复
你对数据做了两次JSON序列化,导致后端无法正确解析,修正后的代码:
function getAccountInfo () { const number = 5 const message = 'some text' const dict_values = {number, message} $.ajax({ url:"http://127.0.0.1:5000/test", type:"POST", contentType:"application/json", // 直接序列化对象,无需重复处理 data: JSON.stringify(dict_values) }); }
错误点:先将dict_values转为字符串s,再对s做JSON.stringify,最终传给后端的是转义后的字符串(如"{\"number\":5,\"message\":\"some text\"}"),后端解析后得到的是字符串而非预期对象。
3. Flask后端代码错误修复
request.get_json()已自动将JSON请求体解析为Python字典,无需再用json.loads(),且返回响应需用jsonify构造标准JSON响应:
from flask import Flask, render_template, request, jsonify # 导入jsonify import json app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/test', methods=['POST']) def test(): output = request.get_json() print(output) print(type(output)) # 此时应为dict类型 # 无需json.loads(output),output已是解析后的字典 return jsonify(output) # 用jsonify返回标准JSON响应 if __name__ == '__main__': app.run(debug=True)
错误点:
request.get_json()返回字典后,再用json.loads()会报错,因为该方法仅接收字符串。- 直接返回字典虽偶能工作,但
jsonify会自动添加正确的响应头(Content-Type: application/json),是标准做法。
验证步骤
- 启动Flask服务,确认控制台显示服务运行在5000端口。
- 访问
http://127.0.0.1:5000/打开页面,触发getAccountInfo函数。 - 查看Flask控制台输出,应能看到
{'number': 5, 'message': 'some text'},前端不再出现连接拒绝错误。
内容的提问来源于stack exchange,提问作者why
相关产品推荐
相关产品推荐

