API выборки: только перенаправление, если в форме POST нет ошибки - PullRequest
0 голосов
/ 26 сентября 2019

Я хотел бы сделать следующее:

Форма POST через fetch, тогда

Если ответом является сообщение об ошибке (res.json): оставайтесь на той же странице и alert(json.errorMsg)

Если ответ представляет собой перенаправление на другую страницу (res.redirect): перенаправление на новую страницу

Проблема в

1) Если я использую event.preventdefault(), моя страницане перенаправляет

2) Если я не использую event.preventdefault(), моя страница всегда перенаправляется (в json, если есть ошибка)

Вот сводка моего кода:

// Client side
form.addEventListener("submit", () => {
  fetch(url, fetchData)
    .then((res) => res.json()) // Transform the data into json
    .then(function (data) {
      alert(data); // Let the user know there was an error in Captcha or provided info
    })
});

// Server side
app.post('/', (req, res) => {
  if (err) {
    console.error(err)
    return res.json({ "success": false, "msg": err })
  }
  return res.redirect("/confirmation_page");
});

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Обычно это решается одним из 2 способов:

  1. Отправка формы на 100% обрабатывается в веб-интерфейсе JavaScript, например, fetch().Перенаправление здесь бессмысленно, перенаправление должно обрабатываться на 100% во внешнем интерфейсе.
  2. Отправка формы - простой HTML.Так как проверка является одним сервером, сервер подтвердит запрос, и в случае ошибки проверки перенаправьте назад в исходную форму.

Поскольку, похоже, вы выбираете# 1, что вы должны сделать:

  1. Использовать preventDefault()
  2. Если отправка прошла успешно, перенаправить по телефону: document.location = '/confirmation_page';
0 голосов
/ 26 сентября 2019

Спасибо Эмиелю и Эверту, вот что я изменил, чтобы заставить его работать:

// Client side
form.addEventListener("submit", () => {
  event.preventDefault();
  fetch(url, fetchData)
    .then((res) => res.json()) // Transform the data into json
    .then(function (data) {
      if (data.success) {
        location.replace("your_url") // redirect page if success
      }
      else {
        alert(data.msg); // Let the user know there was an error in Captcha or provided info
      }

    })
});

// Server side
app.post('/', (req, res) => {
  if (err) {
    console.error(err)
    return res.json({ "success": false, "msg": err })
  }
  return res.json({ "success": true, "msg": "ok" })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...