2011-11-23 16 views
0

我有一个html表单,它将一个动作设置为我的服务器上的一个php脚本。该脚本发出web服务请求并需要几秒钟才能运行。该PHP脚本然后有一个HTML体,它的onload属性设置为关闭窗口。这个想法是,用户提交表单后,窗口关闭,请求被发送到服务器。然而,由于有几秒钟的延迟,用户点击提交,然后它会挂起,直到所有web服务完成,然后php脚本按预期关闭窗口。HTML在等待服务器时隐藏窗口

我正在寻找,只是让它看起来好像更快,也许隐藏窗口右键,因为他们提交而无需等待PHP脚本完成。有没有办法做到这一点?提前致谢。

+0

如果数据立即关闭,数据将不会被提交。你可以尝试客户端JavaScript来做到这一点。 – Zhianc

+0

如果这是一个由您网站上的另一个页面打开的弹出窗口,您可以使用javascript('window.parent')从父页面进行提交。这样,关闭弹出窗口不会中断处理。如果你使用AJAX,父页面不必重新加载或任何东西。 – grossvogel

+0

在php手册中有一个用户评论,描述了一种让浏览器断开连接但让脚本在服务器上运行的方式。 http://www.php.net/manual/en/features.connection-handling.php#104541(还有其他一些使用过程控制或系统命令的方法,但是这很简单,如果它工作的话)没有尝试过,所以YMMV。 – grossvogel

回答

0

我假设你可以重定向到一个页面,该页面上有一个加载的页面,并在THAT页面上进行处理。这可能是我会做的。

我不确定你的意思是“隐藏窗口”也许this link是你在说什么。

如果您的意思是最小化窗口,首先,为什么?其次,我不知道你能做到这一点,如果你可以它可能会在JavaScript(客户端代码)

0

不是真的。如果您较早关闭窗户,则可能无法收到处理我怀疑的完整请求。

不确定为什么你甚至会关闭浏览器窗口。在大多数选项卡式浏览器中,关闭窗口的效果可以忽略不计。

如果是您自己的弹出窗口,您可以将窗体提交到父窗口,然后弹出窗口可以更快地关闭,我猜。我并不完全了解PHP的可能性,但是如果您不想将Web服务结果发送到浏览器,那么您可以将它们放在单独的作业/线程/进程中(什么)并在等待他们完成之前做出回应?

0

当您将formdata发送到webservice时,其余的将发生在服务器上,因此您应该能够将onload脚本移动到按钮的onclick事件。

喜欢的东西

<input type="Button" onclick="document.thisform.submit();window.close();" value="Click" /> 

这是由磁头写入所以它可能含有一些错误。

+0

[php的默认行为](http://php.net/manual/en/features.connection-handling.php)是在客户端断开连接时放弃脚本,尽管它可以被修改。 – grossvogel