由于javascript(包括表单提交)是同步和单线程模型除了ajax调用。是对的吗?但我面临一个问题。
我在第1行提交表单然后关闭弹出窗口。会发生什么是在表单提交之前调用self.close。 所以这里它以异步模式运行。表单提交是异步过程吗?如果是,我怎么能在之后制作代码 表单提交同步?(我不想使用setTimeOut和ajax)
这是我的相关jsp代码
function clickSave()
{
document.form.action="customerAction.do";
document.form.submit();// line 1
self.close();// line 2
}
更新: - 看起来我需要更正自己表单提交是异步过程Is form submit synchronous or async?。所以问题是如何使self.close与表单提交同步
答案 0 :(得分:6)
因为javascript(包括表单提交)是同步和单一的 除ajax调用之外的线程模型。是对的吗?但我面对的是一个 有关此事的问题。
嗯,JS对每个事件监听器都是异步的。 Ajax允许异步模式,将结果作为事件返回。
JS主要不是并发的:一次只执行一个函数。但是,在最新版本中,有一些方法可以在JS(1)
中创建后台“并发”线程JS在单个线程上运行。 (背景线程除外)
我在第1行提交表单然后关闭弹出窗口。什么 发生的是在表单提交之前调用self.close。
这是不可能的。
表单提交是异步过程吗?
提交是异步的,也就是说,JS将继续运行并结束。
你可以测试这个例子(2)。
如果是,我怎样才能在表单提交同步后生成代码?(I 不想使用setTimeOut和ajax)
提交将重新加载整个页面,因此您的JS将结束,之后,窗口将从服务器加载具有表单结果的新页面。您可以在此新页面中包含一个新的JS以“继续”。
如果您不想重新加载所有页面,则必须使用AJAX,在这种情况下,您有2个选项:
(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>