You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32网页服务器XHR发送串口消息:避免编码与冗余内容

解决ESP32网页服务器串口输出编码及多余内容问题

问题根源

你之前的XMLHttpRequest调用完全不符合API规范:xhr.open(encodeURIComponent(message), true);把编码后的消息当成了HTTP请求方法,true被当作URL的一部分,这才导致串口输出出现%3B(分号的URI编码)和多余的/true HTTP/1.1内容。

解决方案

我们需要修正JS的请求逻辑,同时在ESP32端对应处理请求,直接获取纯文本消息。

1. 修改前端JS函数

将原来错误的XHR调用改为标准的POST请求,直接发送纯文本消息:

function sendMessage() {
  let mode;
  if (document.getElementById('radioMode1').checked) {
    mode = "mode1";
  } else if (document.getElementById('radioMode2').checked) {
    mode = "mode2";
  } else if (document.getElementById('radioMode3').checked) {
    mode = "mode3";
  } else if (document.getElementById('radioMode4').checked) {
    mode = "mode4";
  }
  const sep = ";";
  const message = mode + sep + document.getElementById('schaltzahlen').value + sep + document.getElementById('frequenz').value;
  
  const xhr = new XMLHttpRequest();
  // 指定POST方法,请求ESP32的/send路径
  xhr.open("POST", "/send", true);
  // 告诉服务器发送的是纯文本,避免编码
  xhr.setRequestHeader("Content-Type", "text/plain");
  // 直接发送原始消息
  xhr.send(message);
}

2. ESP32端添加请求处理逻辑

在你的ESP32代码中,添加处理/send路径POST请求的函数,读取请求体内容并输出到串口:

#include <WiFi.h>
#include <WebServer.h>

WebServer server(80);

// 处理/send路径的POST请求
void handleSendRequest() {
  if (server.method() == HTTP_POST) {
    // 读取请求体中的纯文本内容
    String serialMsg = server.arg("plain");
    // 输出到串口
    Serial.println(serialMsg);
    // 返回成功响应
    server.send(200, "text/plain", "OK");
  } else {
    // 拒绝非POST请求
    server.send(405, "text/plain", "Method Not Allowed");
  }
}

void setup() {
  Serial.begin(115200);
  // 这里添加你的WiFi连接代码...
  
  // 注册/send路径的处理函数
  server.on("/send", handleSendRequest);
  // 注册你的根路径网页处理函数(原来的网页代码)...
  
  server.begin();
}

void loop() {
  server.handleClient();
}

效果

修改完成后,点击网页按钮时,串口会输出纯原始消息,比如:

mode1;25800;2.5

不会再出现URI编码和多余的HTTP请求内容。

内容的提问来源于stack exchange,提问作者nikolatdr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:05:22