在Python中读取AJAX提交的Web表单name/value键值对的方法
问题解答
首先你需要修正前端AJAX代码的笔误:你写的参数是date: cgiString,正确参数名应为data: cgiString,否则后端会收不到任何提交数据。
针对你的三个疑问直接解答如下:
- 是否需要从STDIN读取数据?
标准CGI运行模式下,POST请求的载荷确实是通过STDIN传递给脚本的,但你不需要手动读取STDIN,Python内置的cgi模块已经封装了相关逻辑,会自动处理读取、解析操作。 - 如何解析name/value键值对?
直接调用cgi.FieldStorage()方法即可解析所有提交的表单字段,无需自己手动拆分序列化的表单字符串。 - 如何返回JSON格式结果?
返回前需要先输出符合CGI规范的HTTP响应头,指定Content-Type为application/json,头和内容之间必须空一行,之后输出JSON字符串即可。
完整可用的test.py代码
#!/usr/bin/python3 # 注意:需要给该文件设置可执行权限,否则CGI服务器会无法运行 import sqlite3 import cgi import json import io # 直接解析表单数据,自动处理STDIN读取、键值对拆分逻辑 form = cgi.FieldStorage() # 读取字段值,第二个参数为默认值,避免对应字段未提交时报错 u_name = form.getvalue('uName', '') u_phone = form.getvalue('uPhone', '') # 此处可插入你的业务逻辑,比如写入sqlite3数据库 # 构造返回结果 resp_data = { "code": 0, "msg": "提交成功", "received_data": { "uName": u_name, "uPhone": u_phone } } # 输出HTTP响应头,必须加空行分隔头和响应内容 print("Content-Type: application/json\r\n\r\n", end="") # 输出JSON结果,ensure_ascii=False避免中文乱码 print(json.dumps(resp_data, ensure_ascii=False))
额外注意事项
- Linux环境下需要给test.py设置可执行权限,执行命令
chmod +x test.py即可,否则CGI服务会返回500错误 - 如果存在跨域请求问题,可以在响应头中补充
Access-Control-Allow-Origin: *
内容的提问来源于stack exchange,提问作者Shawn
相关产品推荐
相关产品推荐

