我使用 Firefox 31.0 在 HTML 网页中遇到以下情况。包含框架的框架集和执行某些评估/功能的按钮。我的问题是我想在提交 POST 表单后重新加载其中一个框架。请参阅图片了解框架的总体布局。
“编辑”框架中的 HTML 表单如下所示:
<form name="edit_this" id="edit_this" action="http://example.com" method="post">
<input type="hidden" name="fnc" value="" id="fnc">
</form>
按钮 HTML 如下所示:
<button onclick="process('uninstall');">Uninstall All Modules</button>
<!-- this line is used to try a javascript reload in the function below-->
<a id="reload" target="base" href="http://example.com" />
调用的 JavaScript 函数如下所示:
function process(fnc) {
document.getElementById('fnc').value = fnc;
document.getElementById('edit_this').submit();
// none of the following work
document.getElementById('reload').click();
top.base.src="http://example.com";
top.base.location.reload();
}
由于某种原因,加载框架的所有三种方式都失败了,例如
document.getElementById('reload').click();
(重新)加载框架“base”及其子框架集,但 POST 数据似乎未到达服务器。看来“click()”执行中断了之前的 POST。 Firebug 的网络跟踪显示服务器仍未回复 POST 请求,但后续的“click()”请求得到了正确管理。
和
top.base.src="http://example.com";
服务器上的处理发生了,但框架没有重新加载(根本)并且保持不变。
和
top.base.location.reload();
这是一个主要问题,因为它将再次发送 POST 数据,这不适用于应用程序逻辑。
我已经在没有飞机的情况下尝试过这些,也许有人知道如何处理它。
谢谢。
更新:我通过使用 setTimeout 找到了问题的可能解决方案,如下所示:
setTimeout(function(){document.getElementById('reload').click();}, 200);
这给出了客户端/服务器响应 POST 的时间并且工作正常,但它看起来有点 hackish,例如。在重负载场景下发生了什么,200ms 足够吗?等等...所以我想我的问题仍然悬而未决。
最佳答案
我建议使用 jQuery 提交表单,如本答案所述: https://stackoverflow.com/a/1200312/1321810
通过这样做,您可以附加一个处理程序,该处理程序可以在帖子完成时重新加载页面,而不必等待 1000 毫秒
关于javascript - 公式 POST 后重新加载框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220231/