【问题标题】:javascript refresh prevents cgi executionjavascript refresh 阻止 cgi 执行
【发布时间】:2012-04-18 22:06:02
【问题描述】:

我正在尝试在 cgi 执行后刷新页面。在我的 cgi 中,一个 tcp 数据包被发送到一个端口。它在隐藏的 iframe 中调用。这是我的javascript代码:

function xx()
{

    iframe = document.getElementById('i');
    iframe.src = path+'?'+ac+'-'+type; // it is sth like that "a.cgi?11-1"

location.reload(true);
}

当我禁用 location.reload cgi 工作但如果我启用它,cgi 不工作,没有数据包被发送。我试图在执行和重新加载之间设置睡眠,但它也不起作用。 cgi执行后还有其他方法可以刷新页面吗?

【问题讨论】:

  • CGI 脚本应该处理刷新操作。使用 JavaScript 刷新页面可能会导致这样的意外行为,因此让服务器端代码处理它。

标签: javascript iframe cgi refresh


【解决方案1】:

您可以为iframe 设置onload 处理程序,这样reload 在 iframe 成功加载之前不会触发(这应该意味着您的 cgi 已经执行):

function xx() {

    iframe = document.getElementById('i');
    iframe.onload = function() {
        location.reload(true);
    }
    iframe.src = path+'?'+ac+'-'+type; // it is sth like that "a.cgi?11-1"
}

如果你还想在重新加载之前有一个时间延迟,你可以这样做:

function xx() {
    iframe = document.getElementById('i');
    iframe.onload = function() {
        setTimeout(function() {location.reload(true)}, 5000);
    }
    iframe.src = path+'?'+ac+'-'+type; // it is sth like that "a.cgi?11-1"
}

【讨论】:

  • 感谢您的回复。我测试了它。它通常可以工作,但有时刷新会比 cgi 更快。我得到错误的结果。我在重新加载之前尝试过睡眠,但它不起作用。
  • @brknl - 根据此代码,在 iframe 完成加载之前不可能进行此重新加载。而且,在 .src 中指定的 URL 完成加载之前,iframe 不会完成加载,这意味着您的 cgi 必须完成。我想知道您是否在其他地方有导致问题的代码。
  • cgi 发送一个数据包到某个地方,它使用数据包并设置一些参数。我尝试通过刷新再次获取这些参数,以了解我的设置过程是否正常。可能是 iframe 已加载,但此设置过程比这慢。那么我怎样才能让睡眠或其他东西等待一点,或者你有什么其他的建议吗?
  • @brknl - 为什么你的 cgi 不将数据返回到 iframe,直到它完成其他内容。 iframe 将等待直到 cgi 响应完成,并且在 cgi 完成之前不会加载。使用我推荐的代码,我想你可以在你的 cgi 中修复它。
  • @brknl - 我添加了第二个选项,在重新加载之前有一个时间延迟,但我认为如果 cgi id 编码为不返回其请求的 iframe 数据直到它的另一个工作完成了。
猜你喜欢
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2017-05-07
  • 1970-01-01
  • 2021-01-11
  • 2019-10-20
  • 1970-01-01
相关资源
最近更新 更多