Как отправить данные с html на контроллер и перезагрузить страницу - PullRequest
0 голосов
/ 24 января 2020

Я написал код для отправки данных с веб-страницы на контроллер. Я не html парень, и я написал с использованием некоторых шаблонов. Я создал форму и хотел отправить значение скорости передачи в контроллер.

<TABLE width=50%>
    <TBODY>
        <TR>
            <TD width=80%>
                <TABLE width=80%>
                    <TBODY>
                        <TD>
                        <FORM name="baudrate" action="baudrate.cgi" method="get">
                            <TABLE width="100%" border="1" cellpadding="2" cellspacing="2">
                                <TBODY>
                                    <TR>
                                        <TD align=center><FONT style="FONT-SIZE: 8pt" face=Arial>&nbsp;<B>Baud Rate:</B></FONT></TD>
                                        <TD align=center height=25><FONT style="FONT-SIZE: 8pt" face=Arial>&nbsp;<!--#p0br--> bits/second</FONT></TD>
                                        <TD><FONT style="FONT-SIZE: 8pt" face=Arial>&nbsp;<select size="1" name="br"><option value="230400">230400</option><option value="115200">115200</option><option value="57600">57600</option><option value="38400">38400</option><option value="19200">19200</option><option value="14400">14400</option><option value="9600">9600</option><option value="4800">4800</option><option value="2400">2400</option><option value="1200">1200</option><option value="600">600</option><option value="300">300</option><option value="110">110</option></select>&nbsp;bits/S<br></FONT></TD>
                                    </TR>
                                    <TR>
                                        <TD></TD>
                                        <TD align="center"><input name="" value="Apply" onclick="window.history.go(0); return false; "type="submit"></TD>
                                    </TR>
                                </TBODY>
                            </TABLE>
                        </FORM>
                        </TD>
                    </TBODY>
                </TABLE>
            </TD>
        </TR>
    </TBODY>    
</TABLE>

В приведенном выше коде, нажав на кнопку отправить, я хотел отправить значение br в контроллер, вызвав baudrate.cgi функция, и я хотел перезагрузить страницу. Если я даю

<TD align="center"><input name="" value="Apply" onclick="window.history.go(0) "type="submit" ></TD>

, тогда веб-страница может отправлять на контроллер , и перезагрузка также происходит , но это происходит только в край Microsoft браузер и в других браузерах выдает ошибку. Если я использую Тогда, веб-страница не может отправить данные в контроллер, но обновляет во всех браузерах.

Есть ли другой способ добиться это ? Кто-нибудь может мне помочь, пожалуйста!

С уважением, Вибху.

1 Ответ

1 голос
/ 24 января 2020

Используйте запрос AJAX, который отправляет и получает эти данные через JavaScript. Таким образом, вы можете создать свой собственный лог c о том, что произойдет, когда вы отправите форму. Если я правильно понимаю, вам нужно следующее:

submit form -> send data to controller -> get response -> reload page

Прежде всего удалите обработчик события onclick. Это будет мешать нашему новому слушателю, который будет запускать HTTP-запрос к серверу. Добавьте файл JS к вашему HTML или запишите все JS внутри элемента <script>. Просто поместите их внизу страницы перед закрывающим тегом </body>.

Таким образом, в barebones ваша форма похожа на приведенный ниже пример.

<form name="baudrate" action="baudrate.cgi" method="get">

  ...

  <select size="1" name="br">
    <option value="230400">230400</option>
    <option value="115200">115200</option>
    <option value="57600">57600</option>
    <option value="38400">38400</option>
    <option value="19200">19200</option>
    <option value="14400">14400</option>
    <option value="9600">9600</option>
    <option value="4800">4800</option>
    <option value="2400">2400</option>
    <option value="1200">1200</option>
    <option value="600">600</option>
    <option value="300">300</option>
    <option value="110">110</option>
  </select>

  ...

</form>

Вам нужно будет выбрать элемент form и добавьте к нему прослушиватель событий. Это похоже на выполнение onclick, но теперь с методом addEventListener. Этот метод позволяет вам связать несколько функций с одним событием, вместо того, чтобы иметь только одно.

Прослушивание события submit. Это событие будет запускаться всякий раз, когда форма была, как вы уже догадались, отправлена. Для правильной работы требуется input type="submit" или button type="submit".

Теперь в функции, которую вы будете запускать при каждом запуске submit в вашей форме, будет содержаться лог c для AJAX звонок на сервер. Вам необходимо получить текущее значение элемента select name="br" и отправить его на контроллер baudrate.cgi. Таким образом, URL для вызова AJAX должен выглядеть примерно так: 'baudrate.cgi?br=14400'.

Каждый раз, когда вы отправляете запрос, могут произойти две вещи. Либо вы получите ответ, и, надеюсь, хороший, либо получите ошибку.

В случае успешного ответа используйте location.reload() для перезагрузки страницы. В случае ошибки просто зарегистрируйте его и отладьте код .cgi, чтобы он работал правильно.

Я предлагаю вам попробовать приведенный ниже пример. Как я уже говорил выше, добавьте файл .js в HTML или вставьте JS в тег <script>. И не забудьте разместить его внизу страницы.

Дайте мне знать, если это сработает и поможет ли это.

// Select the form element.
const form = document.querySelector('form[name="baudrate"]');

// Listen for when the form submits.
form.addEventListener('submit', function(event) {

  // Cancel the default submit.
  event.preventDefault();

  // Get the value from the select element and add it 
  // to the url to send it to the .cgi file.
  const select = form.elements['br'];
  const url = 'baudrate.cgi?br=' + select.value;

  // Send the data and get a response.
  fetch(url).then(function(response) {
    if (response.status === 200) { // If it is a successful response.
      return response.text();
    }
  }).then(function(text) {
    console.log(text); // Show the response from the server.
    location.reload(); // Reload the page.
  }).catch(function(error) {
    console.log(error); // If anything went wrong, show the error.
  });

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