Гарантированный порядок выполнения при отправке HTML-формы и jQuery onclick

0

Голые кости Пример:

<form id="tForm">
   <input type="submit" id="tSubmit" value="Submit">
</form>

<script>
  $(document).on(   'click','#tSubmit', function(e) { someFunction(<fire-and-forget-action)});
</script>

Сценарий использования:

1.) Кнопка кликов пользователя Кнопка отправки

2.) someFunction() называется

3.) tForm представляется как поведение по умолчанию элемента ввода HTML типа = submit.

Я уверен, что вызов someFunction() произойдет до отправки tForm? Возникла проблема, связанная с тем, что существует вероятность того, что вызов someFunction() не будет завершен до отправки tForm и будет отображена новая страница.

  • 1
    Да, функция будет завершена. Событие «click» вызывается до выполнения действия кнопки по умолчанию. Теперь, если код в «нажмите кнопку» обработчик запускает некоторые асинхронный процесс (как отдельный запрос HTTP), то , что не может завершиться до завершения отправки формы.
Теги:
form-submit

1 ответ

0

Если функция fire-and-forget-action является асикрасным запросом, тогда все ставки отключены.

Вам необходимо предотвратить preventDefault() формы (вернуть значение false или вызвать preventDefault() в аргументе события) и выполнить ее после завершения внутренней функции. Например, вы можете реорганизовать "огонь и забыть действие", но без большой информации о том, что он содержит, трудно помочь дальше.

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

Вот небольшой абстрактный пример того, как вы должны это делать:

$('#theForm').submit(function(e) {
    var f = this;
    setTimeout(function() {
        f.submit();
    }, 1000);
    return false;
});

setTimeout в основном эквивалентен некоторому асинхронному запросу, происходящему вне исходного обработчика. Дело в том, что внутренняя функция знает об исходной форме и отправляет ее по завершении.

  • 0
    Функция «забей и забудь» отправляет некоторую информацию об отслеживании сторонним сервисам. Мне придется исследовать и посмотреть, как они отправляют информацию об отслеживании. Я думаю, что это простой пост.
  • 0
    Вам не нужно беспокоиться не о том, как они его отправляют, а о том, как обрабатывается ответ. Если вам не нужно ждать ответа (то есть достаточно отправить запрос), то на самом деле все должно быть в порядке - вам не нужно торчать в ожидании ответа = D

Ещё вопросы

Сообщество Overcoder
Наверх
Меню