Вызов Голанга из HTML - PullRequest
       16

Вызов Голанга из HTML

0 голосов
/ 27 ноября 2018

Я помогаю с проектом с открытым исходным кодом.Это небольшой веб-сервер Go, работающий на устройстве, содержащем Raspberry Pi.Я хочу, чтобы пользователь мог щелкнуть кнопку на html-экране, который вызывает процедуру на Go, которая возвращает 2 значения, логическое значение и строку.

Что мы хотим сделать, это увидеть, какиесетевые интерфейсы на Rasberry Pi, например, соединение по локальной сети работает?

Чтобы сделать это, мне действительно нужно пропинговать сайт с каждого интерфейса.Это займет несколько секунд для каждого из 3 интерфейсов: Lan, WiFi и 3G.

Я могу сделать это, когда запрашивается страница, и заполнять HTML-шаблон при загрузке страницы, но это означает ожидание, может быть, 10до 15 секунд для загрузки страницы, поэтому кажется, что что-то сломано.

Итак, я хочу иметь возможность перечислить каждый из 3-х интерфейсов на странице и дать пользователю нажать «тест», который затем вызываетподпрограмма в базовом веб-сервере Go.

Затем я должен иметь возможность отображать результаты вызова в паре текстовых областей для каждого интерфейса.

Что я пробовал:

Я пытался зарегистрироватьсяфункция Go (в данном случае IsLANConnectionUp), использующая funcmap из пакета net / html и вызывающая его из шаблона html из функции JavaScript, например:

  <button onclick = "getLANStatus()" class="btn btn-primary">Test</button>
 
  <script>
    function getLANStatus() {
        var status = document.getElementById('status');
        {{ if IsLANConnectionUp }}
          status.innerHTML = "Lan is up!"
        {{ else }}
          status.innerHTML = "Lan is down!"
        {{ end }}
    }
  </script>

Но наличие кода шаблона внутри кода javascript, похоже, не работает.Кроме того, я хотел бы, чтобы текст выводился из команды ping (которую моя функция Go getLANStatus и я не знаю, как извлечь эти данные из вызова функции. В документации сказано, что может быть возвращено только одно значение.

Поиск в StackOverflow Я вижу это: вызов функций Голанга из кода JavaScript

$.ajax({
  url: "http://www.example.com/signup",
  data: {username: "whatever"} //If the request needs any data 
}).done(function (data) {
  // Do whatever with returned data
});

Но там говорится что-то вроде "// Делай что-нибудь с возвращенными данными" Я новичок в веб-программировании и поэтому не знаю, как использовать этот код.Если это путь, кто-то может рассказать об этом немного?

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 27 ноября 2018

Здесь пара различных концепций.

Визуализация: при первоначальном запросе к html, который генерирует кнопку Test.Ваш сервер Go отобразит этот HTML 1 раз и вернет его вашему браузеру.Он не будет повторно запрашивать динамически, если вы не подключите некоторые вещи, чтобы изменить веб-страницу.

Клиент. Поэтому, когда кто-то нажимает на вашу кнопку, запускается функция getLANStatus.Вы захотите, чтобы эта функция выполняла несколько вещей

  1. Через ajax связывайтесь с вашим сервером go через API, который будет возвращать состояние ваших соединений как объект json.Что-то вроде

    {"3g": "вверх", "lan": "вниз", "wifi": "вверх"}

  2. Второй, в done часть вашего ajax, вы будете манипулировать чем-то в DOM, чтобы передать, что состояние интерфейсов такое, какое оно есть.Вы можете сделать это, найдя элемент, затем изменив текст на то, что возвращается объектом.

В качестве простого первого шага вы можете alert полезную нагрузку в функции, котораябудет выглядеть так

$.ajax({
  url: "http://YOUR_GO_SERVER_IP_OR_DNS:PORT/interfaces_status.json"
}).done(function (data) {
  alert(data);
  console.log(data);
  debugger;
});

Тогда, если вы запросите, что с открытой консолью в Chrome, вы сможете напрямую поиграть с возвращенным data, чтобы вы знали, на что все это отвечает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...