我有一个搜索框,当用户在结果页面加载时点击提交按钮后,我想显示某种进度指示器。我能找到的最简单的是:
while ( $something == true ) {
// Echo an extra dot, and flush the buffers
// to ensure it gets displayed.
echo ' .';
flush();
// Now sleep for 1 second and check again:
sleep(1);
}
我认为$something应该是用户是否已经提交了搜索表单。问题是,上面的PHP代码将不知道,因为页面已经完成加载。
如何让PHP只在用户提交搜索表单后执行?
你不能。您需要使用JavaScript(也可能是AJAX与服务器端代码交互)
PHP是一种服务器端语言,因此它无法看到浏览器中正在发生的事情。我将只响应浏览器发出的请求。有两种方法可以达到我认为你所追求的。
ajax方式:
为了获得一些实时反馈,您需要一种客户端语言,这将是Javascript。我建议你看看jQuery,一个javascript库,它相当容易理解。更具体地说,您可能需要$.ajax
方法和.submit
事件
您还可以将表单提交到搜索表单所在的相同php页面,然后通过检查表单变量是否存在来检测表单是否已提交。像这样:
if (array_key_exists('search', $_REQUEST) {
// the form has been submitted
}
else {
// the form is not yet submitted
}
假设表单中的搜索框名称为'search'
使用jQuery:
$('#submit').click(function(e)){
e.preventDefault();
$.ajax({
type: "POST",
url: "path/to/php/action",
dataType: "json"
}).done(function(data){
while(data.action == 'waiting'){
$('.somePageClass').html('<p>...</p>');
}else{
$('.somePageClass').html('your results');
}
});
});
类似于使用ajax调用PHP函数,PHP函数必须检查是否等待或完成并返回data.action。
这可能不完全正确,但这是一种尝试(至少是正确的方向)。