Как ждать, прежде чем res.redirect () - PullRequest
2 голосов
/ 04 апреля 2020

В моем файле HTML есть кнопка, которая вызывает щелчок по маршруту после отправки и отправляет форму. Нажатие кнопки также вызывает функцию в моем другом файле javascript, которая активирует окно предупреждения «Sweetalert».

Однако проблема, с которой я столкнулся сейчас, заключается в том, что у пользователя не хватает времени, чтобы прочитать предупреждение до того, как будет выполнен почтовый запрос res.redirect("/").

Я надеялся, что любой из следующие решения:

1) Вызовите предупреждение после перенаправления страницы (я где-то читал, что вы не можете управлять следующей страницей с помощью node.js, поэтому это может быть невозможно).

2) Подождите несколько секунд, прежде чем вызывать res.redirect("/").

3) Любое другое подходящее решение.

HTML файл, содержащий кнопку:

<button formaction="/removetask" type="submit" id="top" class="btn btn-primary btn-block" onclick="success()"> Complete </button>

client- сторона javascript файл:

function success(){
  ...
  swal("Congratulations!", "Goal successfully completed", "success")

}

node.js файл:

app.post("/removetask", async function(req, res) {
  ...
  res.redirect("/");  
});

ссылка на 'sweetalert' в HTML:

<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>

EDIT:

Я заметил, что использование обычного HTML alert() останавливает все и предотвращает перенаправление до тех пор, пока пользователь не закроет предупреждение. Можно ли изменить оповещение «Sweetalert» так, чтобы он вел себя следующим образом?

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Вы можете попробовать другие способы отображения сигналов тревоги.

Во-первых, вам не нужно перенаправлять на исходную страницу.

app.post("/removetask", async function(req, res) {
  ...
  res.render('alarm page') 
});

А на странице сигналов тревоги javascript В файле будет установлено время ожидания.

alarmpage js. js follow

  setTimeout(() => {
     window.location = "/";
  }, 5000)

Тогда результатом будет эта логика c:

  1. нажатие кнопки
  2. рендеринг страницы тревоги
  3. перенаправление на '/' по странице тревоги. js

Вы можете ждать произвольную сумму миллисекунд

0 голосов
/ 06 апреля 2020

Я немного изменил твой код. Теперь при нажатии форма не отправляется.

Jest после нажатия на кнопку успеха форма будет отправлена.

HTML:

<button type="button" id="top" class="btn btn-primary btn-block" onclick="success()"> Complete </button>

JS :

function success(){
  swal({
  title: "Congratulations!",
  text: "Goal successfully completed",
  type: "success",
  }).then(function(){ 
      document.getElementById('form').submit();
  });
}

https://code.sololearn.com/WGoSH0qXkP9I/#html

...