Эта строка:
xmlhttp.open('GET',url,true);
означает, что вы отправляете запрос асинхронный ( MSDN , W3C ).Запрос инициируется вашим кодом, но ваш код не блокирует ожидание его завершения (что обычно является хорошей вещью tm ).
Однако, когда вы отправляете форму,страница сносится и заменяется результатом отправки формы.Любые невыполненные или поставленные в очередь запросы Ajax будут прерваны или даже не запущены.
Вы могли бы сделать запрос синхронным (блокирующим), изменив этот true
на false
, но затем выВы заблокируете страницу (в лучшем случае) или браузер (в худшем случае) до тех пор, пока этот запрос не будет завершен, что не идеально.
Альтернативы - полностью отказаться от выполнения запроса ajax или отменить отправку формы.дождитесь ответа ajax (даже если вас это не волнует), а затем отправьте форму программно (через HTMLFormElement#submit
- например, вызов submit
для элемента DOM form
).Если вы сделаете это второе, обратите внимание, что кнопка, которую вы нажали, не будет включена в данные формы, если вы не вставите ее вручную, поскольку форма больше не отправляется этой кнопкой.