在表单提交和重定向之间显示“请等待”

时间:2012-10-11 15:44:52

标签: php javascript ajax

我有一个页面,其中包含一个HTML表单,一旦用户单击返回的搜索结果列表中的链接,该表单就会提交回自身。一旦他们点击链接,页面将获取提交的变量,在各种外部API上运行一系列搜索,解析大量数据,并向数据库添加一堆内容,然后重定向到 new 已根据该数据创建的页面。

所有搜索和解析最多可能需要六到七秒;我希望能够向用户显示“请等待”的消息,而所有这些工作都在幕后进行。

麻烦的是,我无法显示和隐藏DIV,因为如果我已经在

之前生成了输出,它将搞砸我的PHP重定向
header('Location: ' . $newURL);

命令。我一直在寻找答案,但虽然有许多相似的,但是没有一个能够接近我的具体情况,我可以在他们周围进行攻击。

如果有人能指出我正确的方向,我将不胜感激。


现在有效的更新版本,@Izkata从下面的评论中提供:

jQuery("a").bind('click', function() {
  jQuery('#feedback')[0].innerHTML = 'Searching, please wait...';
})

原来我需要做的是将邮件绑定到点击链接,而不是'提交',因为提交正在查找表单数据。

3 个答案:

答案 0 :(得分:4)

我能想到的最简单的方法不需要服务器做任何事情:

<div id='wait_message' style='display: none;'>
   Please wait while search is in progress...
</div>

...

$$('.links').observe('click', function(e) {
   $('wait_message').show();
});

(使用Prototype.js编写事件;你应该使用任何合适的东西(JQuery / mootools / etc))

<小时/> 使用评论中的示例页面,它可以运行 - 它在Firebug中运行,所以只需将它放在你的页面某处就可以了。:

jQuery('#newMovieSearchForm').bind('submit', function() {
   jQuery('#feedback')[0].innerHTML = 'Searching, please wait...';
})

可能有一种jQuery方式来更新文本而不是使用innerHTML,但我不知道 - 我们不在这里使用jQuery。

答案 1 :(得分:1)

你是对的,你将无法将数据输出到屏幕,然后尝试使用PHP重定向。你可以通过回应JS来实现这个目标:

echo 'Please wait...';
// Time-intensive PHP here
echo '<script>window.location = "new-location.php";</script>';

答案 2 :(得分:0)

您可以这样做:

首先,注意输出缓冲,即你希望php在执行时显示输出 - 你不希望它缓冲。

这样,你可以输出一些显示“加载......”类型的html。

并且,将等待脚本结束它的执行。

有一次,你完成了php,使用meta标签进行重定向,例如:

echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';