Как сделать синхронную отправку формы?

Поскольку javascript (включая отправку формы) является синхронной и однопоточной моделью, за исключением вызовов ajax. Это правильно? Но я сталкиваюсь с одной проблемой по этому поводу.

Я отправляю форму в строке 1, а затем закрываю всплывающее окно. что происходит, так это вызов self.close перед отправкой формы. Так что здесь он ведет себя в асинхронном режиме. Является ли отправка формы асинхронным процессом? Если да, как я могу сделать код после отправки формы синхронным? (Я не хочу использовать setTimeOut и ajax)

Вот мой соответствующий код JSP

function clickSave()
 {

    document.form.action="customerAction.do";
    document.form.submit();// line 1
    self.close();// line 2

 }

Обновить: - Похоже, мне нужно исправить себя, отправка формы является асинхронным процессом согласноЯвляется ли форма отправки синхронной или асинхронной?, Так что вопрос в том, как я могу сделать self.close синхронным с отправкой формы

Ответы на вопрос(1)

Решение Вопроса

Поскольку javascript (включая отправку формы) является синхронной и однопоточной моделью, за исключением вызовов ajax. Это правильно? Но я сталкиваюсь с одной проблемой по этому поводу.

Ну, JS является асинхронным для каждого слушателя событий. Ajax разрешает асинхронный режим, возвращая результат как событие.

JS в основном НЕ СОГЛАСЕН: только одна функция выполняется одновременно. Overwere, в новейших версиях есть способы создания фона »одновременно» JS (1)

JS работает в одном потоке. (кроме фонового JS)

Я отправляю форму в строке 1, а затем закрываю всплывающее окно. что происходит, так это вызов self.close перед отправкой формы.

Это невозможно.

Является ли отправка формы асинхронным процессом?

Отправка асинхронная, то есть JS будет продолжать работать и завершаться.

Вы можете проверить, что будет в этом примере (2).

Если да, как я могу сделать код после отправки формы синхронным? (Я не хочу использовать setTimeOut и ajax)

Submit перезагрузит всю страницу, так что ваш JS закончится, и после этого окно загрузит новую страницу с сервера с результатом формы. Вы можете включить в эту новую страницу новый JS для "Продолжить".

Если вы неЧтобы перезагружать всю страницу, вы должны использовать AJAX, и в этом случае у вас есть 2 варианта:

Асинхронный: вы можете настроить прослушиватель событий на получение и использование результата.Синхронный: ваша страница будет блокироваться, пока результат не будет готов.

Примечание: (1):https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers?redirectlocale=en-US&redirectslug = DOM% 2FUsing_web_workers

(2):


    
        
        function click2()
        {
            document.getElementById('form1').submit();
            for(var i=0; i < 1000000000; i++);
            window.open('http://www.stackoverflow.com');
        }
        

         click 
        <br><br>
        
            
        
    

 emilly19 июн. 2013 г., 19:01
Я отправляю форму в строке 1, а затем закрываю всплывающее окно. что происходит, так это вызов self.close перед отправкой формы. "Я имею в виду, что вызов не идет на сервер, потому что отправка формы асинхронна, а self.close выполняется даже до того, как вызов переходит на сервер. "Так что это возможно :)
 Adrian Maire20 июн. 2013 г., 10:51
Нет: асинхронным является ответ, вызов всегда является синхронным и всегда будет отправляться на сервер. Конечно, если сервер вернет ошибку 404 или любую другую ошибку, ваш JS не сможет ее обработать.
 emilly19 июн. 2013 г., 18:56
Я думаю, что я могу сделать еще одну вещь, создать тег сценария с self.close и вернуться на ту же страницу. Это закроет окно, вот что я думаю "

Ваш ответ на вопрос