我必须在数据库中找到一些价值。但我知道它会在一段时间之间出现。所以我决定创建一个函数并调用此函数,而这个值不会出现。此外,我检查这个值是否会在10秒内出现,然后打破循环:
function get_response($task_id) {
$query = "select * from table where task_id = '$task_id'";
$db->query($query);
$result = $db->getResult();
if (count($result) > 0)
$response = $result;
else $response = false;
return $response;
}
$start = microtime(true);
while (($res = get_response($task_id)) == false && (microtime(true) - $start) < 10) {
if ($res != false) {
print_r($res);
break;
}
if((microtime(true) - $start) >= 10) {
$response = 'timeout';
break;
}
usleep(100000);
}
但是$res
永远不会返回我需要的东西(总是false
。数据库中存在值,而问题是在while循环中引起的)。请以正确的方式纠正我。
答案 0 :(得分:2)
($res = get_response($task_id)) == false
当$ res == false时,你只是进入while循环,所以在循环中它总是为假。尝试:
($res = get_response($task_id)) != false
答案 1 :(得分:0)
在您的代码中不包含页面的任何刷新代码。
尝试每隔10秒为页面使用刷新代码......你可以使用jquery或java-script或Ajax刷新..
答案 2 :(得分:0)
我不知道你的确切前端场景,比如你期望基于什么动作的结果。
但是如果你想继续从服务器获取更新,你绝对可以尝试HTML5 Server-Sent Events
您所要做的就是创建一个EventSource
对象
var source = new EventSource("your_php_file.php");
// your_php_file is what will fetch results from database.
然后你可以听事件
source.addEventListener('message', function(e) {
console.log(e.data); //get the data
}, false);
有一个很好的解释
答案 3 :(得分:0)
我认为还有更多错误。
在get_response
功能中,您不会查询查询,只能将其分配给您不会使用的变量。
而且我也没有看到你在任何地方更改$task_id
。这是所有代码吗?因为否则您总是试图查询相同的task_id。你需要在while循环中改变它。
如前所述,$res
将在{while循环中保留false
。如果您只是在while循环后打印$res
并且不在循环中使用它,那么这不应该是一个问题。