Библиотека: Pagebuilder.h
У меня есть веб-сервер ESP8266, где у меня есть форма с 6 входами.Данные в форме распечатываются в URL, когда я нажимаю «Отправить», а затем я использую server.arg, чтобы получить необходимые данные.Эти данные я сохраняю как строки для каждой отдельной текстовой строки.Затем я хочу снова отправить эту строку на веб-сервер, используя токены.Однако, когда я пытаюсь запустить код, поле для строки ничего не показывает на веб-сайте.Что действительно странно, так это то, что веб-сайт обновляется каждые 5 секунд, и это еще больше запутывает меня, почему значение Strings не отображается.В коде у меня уже есть 5 других токенов, которые возвращают правильное значение каждый раз.
Так я возвращаю данные из формы
int h = 1;
String team1Team = "test";
String team1P1;
String team1P2;
String team2Team;
String team2P3;
String team2P4;
void handleForm() {
String team1Team = Server.arg("team1-playing-as"); //this is the name of the diffrent from inputs
String team1P1 = Server.arg("player1");
String team1P2 = Server.arg("player2");
String team2Team = Server.arg("team2-playing-as");
String team2P3 = Server.arg("player3");
String team2P4 = Server.arg("player4");
if ((Server.args() == 6) && ( h == 1)) {
Serial.println("Team 1: " + team1Team);
Serial.println("Player 1: " + team1P1);
Serial.println("Player 2: " + team1P2);
Serial.println("Team 2: " + team2Team);
Serial.println("Player 3: " + team2P3);
Serial.println("Player 4: " + team2P4);
delay(1000);
h = 0;
}
if ((Server.args() == 0) && ( h == 0)) {
h = 1;
}
}
Как выможно увидеть, что String team1Team установлен на «тест», и именно это он возвращает на веб-сайте.Я сделал это, чтобы узнать, возвращала ли String что-либо или была какая-то ошибка, из-за которой String ничего не возвращала.
Так я отправляю String на веб-сайт
const char html[] = "<div class=\"jumbotron\"><div align=\"center\"><h1 class=\"display-4\" style=\"font-family: zetafonts-cinematografica-extrabold; font-size: 30px;\" > {{TEAM1}} {{SCORE}} {{SCORE2}}</h1></div></div>";
String scoreSend(PageArgument& args) { //this workes fine
return score;
}
String scoreSend2(PageArgument& args) { //this works fine
return score2;
}
String team1return(PageArgument& args) { //this only returns "test"
return team1Team;
}
// I have also tried this:
//String team1return(PageArgument& args) {
//return Server.arg("team1-playing-as");
//}
// but same result.
PageElement body_elem(html, { {"SCORE", scoreSend} });
PageElement Score_2(html, { {"SCORE2", scoreSend2} });
PageElement Team1_elm(html, { {"TEAM1", team1return} });
PageElement CURRENT_GAME_ELEMENT(htmlPage2);
PageBuilder CURRENT_GAME("/current-game", { CURRENT_GAME_ELEMENT, body_elem, Score_2, Team1_elm});
void loop() {
WiFi.softAP("SSID", "PASS");
delay(100);
CURRENT_GAME.insert(Server);
Server.begin();
}
void loop() {
handleForm();
Server.handleClient();
}
Решение может изменить способ, которым я объявляю строки, потому что похоже, что значение, которое строки получают в функции handleForm
, является локальным, а содержимое этой функции недоступно издругие места, чем в функции.Таким образом, у меня также возникает вопрос, как мне объявить строки, чтобы они имели такую же функциональность, но к ним можно было получить доступ из других мест, или просто сделать их глобальными.