Javascript - чтение Json от esp8266 SPIFFS

Сначала я хочу сказать, что у меня нет опыта работы с Javascript/jQuery, и я знаю, что решение моей проблемы может быть довольно простым.

Я хотел сделать сканер WiFi с моим ESP8266, который отображает SSID в таблице на странице. Код ниже работает до сих пор, но задержка довольно грязная. Думаю, в цикле while должна быть возможность проверить, действительно ли файл json заполнен, и если да, то прочитать его и отобразить ssids.

var foot = '<tr style="height:63px;"><td>Selected WiFi: ... &nbsp;Password:&nbsp;<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: ... &nbsp;Password:&nbsp;<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 из браузера, если не сделаете запрос на сервер. (И на сервере должна быть реализована такая функция)

Другие вопросы по тегам