存储会话变量的进度

时间:2014-04-19 12:48:21

标签: javascript php jquery ajax session

我正在尝试在用户在我的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'];


}

3 个答案:

答案 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)

我设法使用文件中的缓存解决了这个问题,不知道它是多么优化,但感谢大家的建议!