STM32 LWIP Web服务器CGI处理器如何返回JSON数据至网页
解决STM32 LWIP Web服务器CGI返回JSON数据的问题
原CGI处理器通过返回HTML文件路径实现页面重定向,但要直接返回JSON数据供前端AJAX解析,需要修改处理器逻辑,直接向HTTP响应写入JSON内容,而非返回路径。
修改步骤及代码示例
LWIP的HTTP服务器允许CGI处理器直接输出响应内容,核心是使用cgi_write写入数据,并设置正确的响应头,最后返回NULL告知服务器无需加载文件:
#include "lwip/apps/httpd.h" #include <string.h> const char *CGIsetting_Handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[]) { // 1. 构造JSON数据(可替换为实际动态获取的系统参数) const char *json_data = "{" "\"Description\": \"STM32工业控制器\"," "\"Serial_Number\": \"SN-2024-0001\"," "\"Device_Tag\": \"DEV-CON-001\"," "\"Contact\": \"support@example.com\"," "\"Firmware_Version\": \"v1.2.0\"" "}"; // 2. 设置响应头:指定内容类型为JSON,确保前端正确解析 httpd_set_content_type("application/json"); // 3. 将JSON数据写入HTTP响应体 cgi_write(json_data, strlen(json_data)); // 4. 返回NULL,告知服务器已自行处理响应,无需重定向到HTML文件 return NULL; }
关键说明
- 响应头设置:
httpd_set_content_type("application/json")是必须的,缺失会导致前端JSON.parse解析失败。 - 动态参数处理:如果需要返回实时系统数据,可通过拼接字符串生成JSON(注意分配足够的缓冲区,避免内存溢出)。
- LWIP配置检查:确保工程中开启了
LWIP_HTTPD_CGI宏,否则CGI功能无法正常工作。
修改后,前端AJAX请求会收到正确的JSON响应,即可正常解析并渲染页面元素。
内容的提问来源于stack exchange,提问作者Pratheek M C
相关产品推荐
相关产品推荐

