我在同一页面域的IFrame中有6个表单,点击按钮保存&关闭表单应该提交,然后页面应该关闭,但我注意到前5个表单已提交,但最后一个表单被延迟了一段时间,并且页面在完成保存之前关闭。这只发生在FireFox,我测试它通过IE和Chrome运行良好。
以下是一些代码:
<div id="div_1">
<iframe id='iframe_1' name='iframe_1' width="100%" frameBorder='0'
src='/aaa.jsp'></iframe>
</div>
<div id="div_2">
<iframe id='iframe_2' name='iframe_2' width="100%" frameBorder='0'
src='/bbb.jsp'></iframe>
</div>
!-- ... --
<div id="div_6">
<iframe id='iframe_6' name='iframe_6' width="100%" frameBorder='0'
src='/hhh.jsp'></iframe>
</div>
save&amp;关闭按钮:
<input type="button" value="Save & Close"
onclick="for(var i = 0; i < frames.length; i++) { frames[i]._Submit('Update');}time_to_close();" />
<script>
function time_to_close()
{
setTimeout(function(){
window.close();
}, 5000);
}
</script>
任何人都可以提供帮助吗?
答案 0 :(得分:3)
所有浏览器都对同一服务器的并发连接数实施限制。 (有些服务器也可以这样做。)实际数量取决于浏览器供应商和HTTP版本,但通常介于2到8之间。几年前的情况总结了(可能是仍然相当准确)on this page;引用相关的一点:
Browser HTTP/1.1 HTTP/1.0 IE 6,7 2 4 IE 8 6 6 Firefox 2 2 8 Firefox 3 6 6 Safari 3,4 4 4 Chrome 1,2 6 ? Chrome 3 4 4 Opera 9.63 4 4 Opera 10.00alpha 4 4
您的time_to_close
函数假定所有提交的内容不会超过五秒钟。即使没有并发连接限制,该假设也是不正确的。用户的连接可能暂时已经饱和,可能存在最终被解决的临时路由问题,服务器可能过载以及排队连接等等等。您最好提交返回的内容检查帧(一个标志,无论如何),然后设置一个定时检查等待所有标志设置(当然,可能给用户提供等待更长时间的选项)。
但是,更好的是,如果您控制服务器端,您可以将所有数据收集到一个提交中,这几乎肯定会显着提高感知性能(设置的开销) HTTP连接发送表单通常是表单提交的最长部分,禁止服务器慢慢处理表单本身。