我正在尝试在用户在我的Web应用程序(php / js / html)中执行查找请求时实现进度条。
当用户执行查找请求时,应用程序使用ajax执行php脚本,此脚本会定期将其进度存储在会话变量中。
我尝试做的是使用另一个ajax请求轮询服务器以请求会话进度变量,但该变量不存在。
为什么会发生这种情况,这是不是可以使用php会话?
由于
JS逻辑:
// When the user selects interested object, find it on the server
$(document).on('change', '#findStreamer', function()
{
$streamerId = $(this).val();
$streamerName = $('#findStreamer option[value="'+$streamerId+'"]').text();
console.log('findDB', $streamerId, $streamerName);
addProgressBar();
getProgress();
$.ajax({
type: 'POST',
url: 'serverlink/findobject',
data: {
findChannel: $streamerName,
checkOnline: true
},
success: function(response)
{
$streamData = JSON.parse(response);
$('#streamPreview').remove();
// $('#findPanelToolbar').before($streamData.streamerView);
console.log($streamData);
}
});
});
function getProgress()
{
$.ajax({
type: 'POST',
url: 'serverlink/getprogress',
complete: getProgress,
timeout: 60000,
success: function(response)
{
$progresValue = response;
updateProgressBar($progresValue);
}
});
}
服务器逻辑:
public function action_findobject()
{
$_SESSION['percentage'] = 0;
if(!(Input::is_ajax()))
{
$response = Response::forge();
$response->set_status(400);
return $response;
}
// Long actions //
$_SESSION['percentage'] = 10;
// Long actions //
$_SESSION['percentage'] = 45;
// Long actions //
$_SESSION['percentage'] = 100;
return $Outputdata;
}
public function action_getprogress()
{
return $_SESSION['percentage'];
}
答案 0 :(得分:0)
我认为你需要创建php脚本,它将执行一些大部分进程并使用%发送json。还需要将百分比存储在会话中。在浏览器中,您将调用ajax直到获得一些错误或结果100%。从服务器得到答案后,如果百分数< 100 - >向客户显示新的百分比行并向服务器发出相同的请求..
答案 1 :(得分:0)
不是解决方案,所以我会解释这个,但要回答这个问题,“这是不可能使用php会话?” ...看起来像是否 - 或者至少不在代码中目前的形式。您必须以某种方式将资源密集型操作委托给另一个进程,因为以下简单测试表明第一个操作是阻止。
<?php // sleep.php
session_start();
$_SESSION['foo'] = gmdate('r');
sleep(10);
<?php // test.php
session_start();
echo !isset($_SESSION['foo'])
? 'session not set'
: $_SESSION['foo'];
测试:
浏览 /sleep.php ,它会在会话中设置一些值,然后等待10秒(任意)以模仿一些详尽的程序/执行。在10秒延迟内打开一个新标签,然后浏览 /test.php 。
预期结果:
/test.php 会立即返回 /sleep.php
设置的日期实际结果:
/test.php 请求挂起/等待 /sleep.php 请求完成。
答案 2 :(得分:0)
我设法使用文件中的缓存解决了这个问题,不知道它是多么优化,但感谢大家的建议!