1

我正在寻找一种在表单提交上启动函数的方法,它不会让浏览器窗口等待结果。

示例:用户填写表单并按提交,通过 javascript 将表单中的数据发送到数据库,php 中的一个需要几秒钟的函数将启动,但我不希望用户等待该函数的结束. 我希望能够将他带到另一个页面并让该功能在服务器端执行其操作。

有什么想法吗?

谢谢


感谢所有的答复...

我得到了ajax部分。但是我不能调用 ajax 并让浏览器移动到另一个页面。

这就是我想要的。

- 用户填写表单并提交 - 传递给数据库的表单结果 - 长烦人的进程功能启动 - 用户继续访问站点的其余部分,独立于“长烦人的进程功能”的状态

顺便说一句,在有人建议之前。不,它不能由 cron 作业完成

4

5 回答 5

3

使用 AJAX 调用 php 脚本,并在脚本顶部打开ignore_user_abort

ignore_user_abort(true);

这样,如果他们离开页面,脚本将继续在后台运行。你也可以使用

set_time_limit(0);

设置时间限制,如果您知道脚本需要一段时间才能完成,这很有用。

于 2009-05-22T18:12:28.387 回答
1

最常用的方法是:

exec("$COMMAND > /dev/null 2>&1 &");
于 2009-05-22T17:43:23.710 回答
1

啊,好吧,那么您实际上是在问,PHP 是否支持线程,一般的答案是否定的......但是......

您可以执行一些技巧来模仿这种行为,其中一个在上面突出显示,涉及分叉到服务器上的单独进程,这可以通过多种方式实现,包括:

exec()

方法。您可能还想看这里;

PHP 线程

我还看到人们试图在脚本中途强制刷新输出缓冲区,试图将响应强制返回给客户端,我不知道这种方法有多成功,但也许其他人会有一些关于该方法的信息。

于 2009-05-22T17:57:43.717 回答
0

这正是 AJAX(异步 JavaScript + XML 的简写)的用途;

AJAX 信息

它允许您使用客户端代码进行编码,并向您的服务器发送异步请求,这样用户的浏览器就不会被整个页面请求中断。

网上有很多与 AJAX 相关的信息,所以请深吸一口气,开始搜索吧!

于 2009-05-22T17:44:07.403 回答
0

听起来您想使用 AJAX(异步 Javascript 和 XML - google)必须提供的一些功能。

基本上,您将拥有一个包含内容的页面。当用户单击按钮时,javascript 将用于将数据 POST 到服务器并开始处理。同时,该 javascript 可能会从服务器加载页面并显示它(例如,加载数据,然后用该新页面替换 DIV 的内容。)

这种事情是 AJAX 背后的前提,当您有一个网页同时执行多项操作时,您随处可见。

值得注意的是:这并不意味着脚本“在服务器的后台”运行。您的网络浏览器仍在与网络服务器保持连接——这意味着代码在客户端的“后台”中运行。“后台”实际上是指“与其他 HTTP 请求并行处理 HTTP 请求,以给人一种‘后台’运行进程的感觉”

于 2009-05-22T17:45:46.153 回答