1

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

所有的搜索和解析最多可能需要六到七秒;我希望能够在所有工作都在幕后进行时向用户显示“请稍候”类型的消息。

问题是,我无法显示和隐藏 DIV,因为如果我在

header('Location: ' . $newURL);

命令。我已经四处寻找答案,但虽然有很多相似的答案,但没有一个与我的具体情况足够接近,我可以绕过它们。

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


更新后的版本现在可以使用了,来自@Izkata 的以下评论:

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

原来我需要做的是将消息绑定到单击链接,而不是“提交”,因为提交正在寻找表单数据。

4

3 回答 3

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。

于 2012-10-11T15:48:25.510 回答
1

没错,您将无法将数据输出到屏幕,然后尝试使用 PHP 进行重定向。您可以通过回显 JS 来完成此操作:

echo 'Please wait...';
// Time-intensive PHP here
echo '<script>window.location = "new-location.php";</script>';
于 2012-10-11T15:48:00.700 回答
0

你可以这样做:

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

这样,您可以输出一些显示“正在加载..”之类的 html。

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

一次,您完成了 php,使用meta标签重定向,例如:

echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';
于 2012-10-11T15:51:00.397 回答