【问题标题】:Laravel get Session with javascript while loadingLaravel 在加载时使用 javascript 获取会话
【发布时间】:2015-07-21 17:41:42
【问题描述】:

这是我的场景:

-我正在处理一个大约需要 10 分钟的 excel 文件
-在处理时,我想向用户发送我们当前正在处理的反馈

我的想法是使用 Session 在处理时赋予价值,并在当前视图中使用 javascript 获取该 Session
这是我的脚本:

<script type="text/javascript">
    $(document).ready(function() {
        var element = document.getElementById("progress");
        setInterval(
            function(){
                element.innerHTML = "{{Session::get('progress')}}";
            },500
        );
    });
</script>


在我的控制器的某个地方,让我们这样说:

    $i = 0;
    while(!$done){
        processingComplicated();
        Session::put('progress', $i);
        Session::save();
    }


我的基本观点:

<div id="progress">0</div>

基本上,我希望当前页面获取会话数据并更新视图(id="progress"),但它不会改变。
可以做到吗?谢谢。

【问题讨论】:

  • 它不能按照你想要的方式完成——你需要重新加载页面才能真正获得新的会话数据。很多人使用 iframe 或使用 AJAX 来执行此操作 - 要点是您需要实际加载 PHP 文件以获取更新的值,您不能只是将 session var 放在页面中的某个地方并期望它神奇更新而不更新页面。

标签: javascript php session laravel


【解决方案1】:

使用AJAX 更新视图

$(document).ready(function() {
    var element = document.getElementById("progress");
    setInterval(
        function(){
            $.get( "processing-status", function( data ) {
                 element.innerHTML = data;
            });
        },500
    );
});

在你的路线、控制器或任何你想要的地方

Route::get('/processing-status', function()
{
    return Session::get('progress');
});

【讨论】:

  • 你还在做 Session::put 吗?如果您使用 debug 访问 /processing-status 它会显示什么?
  • "0" 这是正确的,因为我把 Session::put('progress', 0);会话::save();在渲染上传页面之前,我认为脚本有问题。,
  • 很高兴它可以工作,您是在 $.get 还是在路由中更改它?编辑我的答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2014-06-27
  • 2012-03-28
  • 2013-07-16
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多