如何在 javascript 中将平面文本数据从一个本地 ip 检索到另一个?
How can I retrieve plane text data from one local ip to another in javascript?
我正在使用 ESP32 Wifi 模块作为主机来托管一个网页,该网页显示 table 中许多二进制数据点的值,如 OK
或 FAILED
。我需要让这个设备从本地 IP 上的另一个 ESP32 客户端检索数据,即 192.168.138.50/readVal1
这个地址将只显示平面文本 OK
或 FAILED
。我想获取此值并将其显示在我的主模块生成的 table 中。我应该怎么做?
我尝试在 Arduino 代码中使用 HTTP get 请求,如下所示。
void runTest6(){
String payload;
HTTPClient http;
http.begin("192.168.137.50/readBatt1");
int httpCode = http.GET();
if(httpCode > 0) {
payload = http.getString();
Serial.println(payload);
}else{
Serial.println("HTTP request error");
}
http.end();
String batt6val = payload;
server.send(200, "text/plane", batt6val);
}
这是我的 Javascript 在处理更新的根上\
function getData(){
try{
console.log("Getting Data...");
for(var i = 1;i<=NUMOFUNITS;i++){
(function (i){
setTimeout(function () {
console.log("(debug msg)in loop #: " + i)
var xhttp = new XMLHttpRequest();
var current = "batt" + i + "val";
var dataRead = "readBatt" + i;
xhttp.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200){
console.log("updating innerHTML for data value: " + i);
document.getElementById(current).innerHTML = this.responseText;
}else if(this.readyState == 4 && this.status == 404){
console.log("no battery @ " + i);
document.getElementById(current).innerHTML = "None found";
}
};
xhttp.open("GET", dataRead, true);
xhttp.send();
if(i == 1){
updateTime();
console.log("Updated times.")
}
}, 400*i);
})(i);
};
console.log("Data update complete.");
}
catch(err){
alert(err.name);
throw err;
getData(); //try to get data again
}
finally{
console.log("DONE");
}
}
使用 HTTP 服务器,我可以在 ESP32 之间发送信息。使用我设置的 WebServer server.on("/status/{}", sendData);其中 {} 包含 pathArg,也就是代表请求哪些数据的数字。函数 senData() 采用 pathArg 并发送适当的数据,如下所示。
void sendData(){
String battString = server.pathArg(0);
Serial.println("Sending Data... PathArg= " + battString);
int battNum = battString.toInt();
int arrayNum = battNum - 1;
server.send(200, "text/plane", battStatus[arrayNum]);
}
这里有一个名为 battStatus 的数组保存每个的状态。
我正在使用 ESP32 Wifi 模块作为主机来托管一个网页,该网页显示 table 中许多二进制数据点的值,如 OK
或 FAILED
。我需要让这个设备从本地 IP 上的另一个 ESP32 客户端检索数据,即 192.168.138.50/readVal1
这个地址将只显示平面文本 OK
或 FAILED
。我想获取此值并将其显示在我的主模块生成的 table 中。我应该怎么做?
我尝试在 Arduino 代码中使用 HTTP get 请求,如下所示。
void runTest6(){
String payload;
HTTPClient http;
http.begin("192.168.137.50/readBatt1");
int httpCode = http.GET();
if(httpCode > 0) {
payload = http.getString();
Serial.println(payload);
}else{
Serial.println("HTTP request error");
}
http.end();
String batt6val = payload;
server.send(200, "text/plane", batt6val);
}
这是我的 Javascript 在处理更新的根上\
function getData(){
try{
console.log("Getting Data...");
for(var i = 1;i<=NUMOFUNITS;i++){
(function (i){
setTimeout(function () {
console.log("(debug msg)in loop #: " + i)
var xhttp = new XMLHttpRequest();
var current = "batt" + i + "val";
var dataRead = "readBatt" + i;
xhttp.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200){
console.log("updating innerHTML for data value: " + i);
document.getElementById(current).innerHTML = this.responseText;
}else if(this.readyState == 4 && this.status == 404){
console.log("no battery @ " + i);
document.getElementById(current).innerHTML = "None found";
}
};
xhttp.open("GET", dataRead, true);
xhttp.send();
if(i == 1){
updateTime();
console.log("Updated times.")
}
}, 400*i);
})(i);
};
console.log("Data update complete.");
}
catch(err){
alert(err.name);
throw err;
getData(); //try to get data again
}
finally{
console.log("DONE");
}
}
使用 HTTP 服务器,我可以在 ESP32 之间发送信息。使用我设置的 WebServer server.on("/status/{}", sendData);其中 {} 包含 pathArg,也就是代表请求哪些数据的数字。函数 senData() 采用 pathArg 并发送适当的数据,如下所示。
void sendData(){
String battString = server.pathArg(0);
Serial.println("Sending Data... PathArg= " + battString);
int battNum = battString.toInt();
int arrayNum = battNum - 1;
server.send(200, "text/plane", battStatus[arrayNum]);
}
这里有一个名为 battStatus 的数组保存每个的状态。