Выполняется ли js после отправки синхронизированной формы

мой код выглядит следующим образом:

form.submit();//synchronized submit, not asynchronous,the form is not a html form but created by javascript
some codes here;//Is this line executed, or it sometimes executed sometimes not

У меня есть код статистики (отправить http-запрос на сервер) во 2-й строке и действительно получить некоторые данные. Поскольку существует большой разрыв между статистическими данными и ожидаемыми, я сомневаюсь, что 2-я строка всегда выполняется.


person Hsin    schedule 14.08.2012    source источник


Ответы (1)


Это зависит от того, что форма делает при отправке:

  • Если форма отправляется нормально, код может работать. Обычная отправка формы перенаправляет браузер на URL-адрес, указанный в атрибуте действия. Код может работать, но страница уже готовится к выходу, поэтому вы можете не увидеть, что делает код после form.submit().

  • Если форма отправляется и перехватывается JavaScript (возможно, обработчиком событий), тогда код после form.submit() может выполняться, но зависит от того, что делает этот обработчик событий. Если обработчик не препятствует нормальной отправке формы, то ситуация аналогична первой. Если обработчик препятствует нормальной отправке формы, он может работать.

Я предлагаю вам создать обработчик для этой формы, который предотвращает нормальную отправку формы с использованием таких методов, как return false и/или event.preventDefault(), а также запускать там код.

person Joseph    schedule 14.08.2012
comment
В основном это. Если вы нажмете на ссылку или отправите форму, будут запущены все события, связанные с этим событием, а затем начнется перенаправление браузера. Как только браузер начинает перенаправлять, любые открытые соединения (асинхронные соединения или такие вещи, как изображения, которые еще не загружены) отменяются, даже если серверу требуется некоторое время, чтобы вернуться со следующей страницей. впоследствии, если у него есть какие-либо вызовы изображения/скрипта/ссылки/и т. д. для отправки данных, чаще всего они будут отменены в onunload(). Итак, если вы полагаетесь на асинхронные/внешние данные, хитрость заключается в том, чтобы отложить form.submit() - person Norguard; 14.08.2012
comment
Спасибо за ответ, но я все еще не уверен - person Hsin; 15.08.2012