Javascript - чтение Json от esp8266 SPIFFS
Сначала я хочу сказать, что у меня нет опыта работы с Javascript/jQuery, и я знаю, что решение моей проблемы может быть довольно простым.
Я хотел сделать сканер WiFi с моим ESP8266, который отображает SSID в таблице на странице. Код ниже работает до сих пор, но задержка довольно грязная. Думаю, в цикле while должна быть возможность проверить, действительно ли файл json заполнен, и если да, то прочитать его и отобразить ssids.
var foot = '<tr style="height:63px;"><td>Selected WiFi: ... Password: <input id="pw" type="text"><button onClick="connect()" class="btn btn-primary" type="button" style="margin-left:5%;">Connect</button></td></tr>';
var foot_last = '<tr style="height:63px;"><td>Selected WiFi: ... Password: <input id="pw" type="text"><button onClick="connect()" class="btn btn-primary" type="button" style="margin-left:5%;">Connect</button></td></tr>';
//gets called when the scan button is pressed
function scan() {
//Tells the ESP8266 to write the SSIDs in the json file scan.json (takes a while until its done)
$.post("/scan");
//this delay needs to be replaced. The code should only move on if the scan.json is not empty
delay(2000);
//Json gets read and contents displayed
$.getJSON("/scan.json", function(data) {
$.each(data, function(index, value) {
console.log(value);
var tbl_hoe = '<tr onClick="select()" style="height:63px;"><td>' + value + '</td></tr>';
foot = tbl_hoe + foot;
document.getElementById('tab').innerHTML = foot;
});
});
//at this point the json must be emtyed
}
function delay(ms) {
ms += new Date().getTime();
while (new Date() < ms) {}
}
2 ответа
Большие танки для Дейва Ньютона. Мне не пришло в голову, что я мог бы просто использовать ESP8266 для отправки данных напрямую через http без промежуточной json
Относительно //this delay needs to be replaced. The code should only move on if the scan.json is not empty
Если вы посмотрите документы для $.post, вы увидите, что для этого нужно 2 аргумента. Первый - это URL, а второй - обратный вызов, который вызывается после выполнения запроса.
function scan() {
$.post("/scan", function(data) {
$.getJSON("/scan.json", function(data) {
$.each(data, function(index, value) {
console.log(value);
});
});
});
}
Что касается: //at this point the json must be emtyed
Вы не можете изменить содержимое файла json из браузера, если не сделаете запрос на сервер. (И на сервере должна быть реализована такая функция)