我有一个页面,其中包含一个HTML表单,一旦用户单击返回的搜索结果列表中的链接,该表单就会提交回自身。一旦他们点击链接,页面将获取提交的变量,在各种外部API上运行一系列搜索,解析大量数据,并向数据库添加一堆内容,然后重定向到 new 已根据该数据创建的页面。
所有搜索和解析最多可能需要六到七秒;我希望能够向用户显示“请等待”的消息,而所有这些工作都在幕后进行。
麻烦的是,我无法显示和隐藏DIV,因为如果我已经在
之前生成了输出,它将搞砸我的PHP重定向header('Location: ' . $newURL);
命令。我一直在寻找答案,但虽然有许多相似的,但是没有一个能够接近我的具体情况,我可以在他们周围进行攻击。
如果有人能指出我正确的方向,我将不胜感激。
现在有效的更新版本,@Izkata从下面的评论中提供:
jQuery("a").bind('click', function() {
jQuery('#feedback')[0].innerHTML = 'Searching, please wait...';
})
原来我需要做的是将邮件绑定到点击链接,而不是'提交',因为提交正在查找表单数据。
答案 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/\'">';