在公式POST后重新加载框架

时间:2014-08-09 15:41:32

标签: javascript html dom

我在HTML网页中使用Firefox 31.0有以下场景。包含框架的框架集,以及执行某些评估/功能的按钮。我的问题是我想在提交POST表单后重新加载其中一个框架。有关帧的一般布局,请参见图片。

enter image description here

框架中的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();

(重新)加载框架&#34; base&#34;并且它的子框架设置正确,但POST数据似乎没有到达服务器。它似乎是&#34; click()&#34;执行会中断以前的POST。使用firebug show进行网络跟踪POST请求仍未被服务器重新提供,但随后的&#34; click()&#34;请求已正确管理。

top.base.src="http://example.com";

服务器上的处理发生了,但框架没有重新加载(根本没有)并保持不变。

top.base.location.reload();

是一个主要问题,因为它会再次发送POST数据,这不适用于应用程序逻辑。

我已经尝试过这些没有avial,也许有人知道如何处理它。

谢谢。

更新:我已经通过使用setTimeout找到了解决问题的可能方法,如下所示:

setTimeout(function(){document.getElementById('reload').click();}, 200);

这给了客户端/服务器响应POST的时间并且工作正常,但它看起来有点像hackish,例如。在重载情况下会发生什么,将足够200毫秒?等等......所以我的问题仍然是开放的,我猜。

1 个答案:

答案 0 :(得分:1)

我建议使用jQuery提交表单,如下所示: https://stackoverflow.com/a/1200312/1321810

通过执行此操作,您可以附加一个处理程序,可以在帖子完成时重新加载页面,而不是等待1000毫秒