如何使表单提交同步

How to make form submission synchronous?

本文关键字:同步 表单提交 何使      更新时间:2023-09-26

由于javascript(包括表单提交)是同步和单线程模型,除了ajax调用。对吗?但我面临着一个问题。

我在第1行提交表单,然后关闭弹出窗口。发生的是自我。在表单提交之前关闭get调用。这里它在异步模式下运行。表单提交是一个异步过程吗?如果是,我怎么能使代码后表单提交同步?(我不想使用setTimeOut和ajax)

这是我的相关jsp代码

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

更新:-看起来我需要纠正自己的表单提交是异步过程,如每是表单提交同步或异步?所以问题是我如何使自己。与表单提交紧密同步

因为javascript(包括表单提交)是同步的和单一的除了ajax调用之外的线程模型。对吗?但我正面临着一个关于这个的问题。

JS对每个事件监听器都是异步的。Ajax允许异步模式,将结果作为事件返回。

JS大多不是并发的:一次只执行一个函数。然而,在最新版本中,有方法在JS中创建后台"并发"线程(1)

JS在单线程上运行。(除了后台线程)

我在第1行提交表单,然后关闭弹出窗口。什么发生的是自我。在表单提交前关闭get调用

那是不可能的。

表单提交是一个异步过程吗?

提交是异步的,也就是说,JS将继续运行并结束。

你可以测试这个例子(2)。

如果是,我如何使代码后表单提交同步?(我不要使用setTimeOut和ajax)

Submit将重新加载整个页面,因此JS将结束,之后,窗口将从服务器加载带有表单结果的新页面。你可以在这个新页面中加入一个新的JS来"继续"。

如果您不想重新加载整个页面,您必须使用AJAX,在这种情况下,您有两个选项:

  • 异步:你可以设置一个事件监听器来接收和使用结果。
  • 同步:你的页面将阻塞,直到结果准备好。

注意:(1): https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers?redirectlocale=en-US& redirectslug = DOM % 2 fusing_web_workers

(2):

<html>
    <body>
        <script type="text/javascript">
        function click2()
        {
            document.getElementById('form1').submit();
            for(var i=0; i < 1000000000; i++);
            window.open('http://www.stackoverflow.com');
        }
        </script>
        <button onclick="click2();"> click </button>
        <br/><br/>
        <form id="form1" action="http://www.duckduckgo.com" method="get">
            <input type="text" value="hello"/>
        </form>
    </body>
</html>