如何有一个PHP条件继续检查页面加载后


How to have a PHP conditional continue to check after a page has loaded

我有一个搜索框,当用户在结果页面加载时点击提交按钮后,我想显示某种进度指示器。我能找到的最简单的是:

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。

这可能不完全正确,但这是一种尝试(至少是正确的方向)。