【问题标题】:Laravel Session data not written/update/availabe in View when using AJAX使用 AJAX 时,Laravel 会话数据未在视图中写入/更新/可用
【发布时间】:2014-05-16 17:42:43
【问题描述】:

当我在控制器操作中使用 Session::put() 向 Session 添加内容时,在我的视图中该数据不可用,在执行 AJAX 请求时使用 Session::get()

Former 包也有同样的问题,我用它来构建漂亮的表单。它依赖于通过 Session 传递一些信息,用于将字段标记为有效/无效。此功能在使用 AJAX 时也不起作用。

我像往常一样在我的视图中设置了一个视图:

$this->layout->content = View::make('account.login')

对于 AJAX 请求,我不会以常规方式呈现布局,而是获取模板的特定“内容”部分并返回它:

$this->layout->content->renderSections()['content']
  • 当我执行“正常”请求时,会话数据工作正常。
  • 当我执行 AJAX 请求时,在 AJAX 调用期间控制器中设置的会话数据会被忽略。 AJAX 调用之前的任何会话数据集都可用。

我想知道 Laravel 是否对 AJAX 调用下的 Session 或上面的“renderSection()”方法有问题?

我已经检查了所有明显的问题:

  • AJAX 请求使用与非 AJAX 请求相同的会话 ID。
  • GET/POST 动词使用正确等。

复制:

  • 在控制器操作中:Session:put('foo','bar');
  • 在 VIEW 文件中(在内容部分):Session:put('foo2','bar2');
  • 在 VIEW 文件中(在内容部分):var_dump(Session::get('foo','bar')); // 在非 AJAX 调用中返回 'bar',但在 AJAX 调用中不返回任何内容(!!!)
  • 在 VIEW 文件中(在内容部分):var_dump(Session::get('foo2')); // 按预期在 AJAX 和非 AJAX 调用中返回“bar2”。

在渲染视图时,控制器操作中设置的会话值似乎丢失了。因此,我的问题是 1)Laravel 中的 AJAX 与 SESSION 问题,还是 2)我不知道的 Session 与 renderElement() 问题?

【问题讨论】:

  • 我遇到了类似的问题 - 使用 ajax 将表单提交到购物车功能。会话是在函数中创建的,但是一旦我转移到另一种方法,例如获取购物车,会话就不存在或创建!你解决了吗?

标签: ajax laravel-4


【解决方案1】:

我遇到了同样的问题,刚刚找到了一个潜在的解决方案:

我发现了一个与 laravel 3 相关的类似问题。要使会话在 ajax 调用中持续存在,您需要正确返回响应。

return json_encode($response);

这是导致问题的原因。这似乎不是使会话持续存在的有效响应。将其更改为:

return Response::json($response); 

这使会话能够持续存在!

由于某种原因,普通表单提交或调用方法允许第一个,但 ajax 不允许。

我在其他地方看到了有关影响会话的方法中的 echo 语句的引用 - 我认为返回的行为必须类似于 echo

这是触发解决方案的帖子: http://forumsarchive.laravel.io/viewtopic.php?id=1304

【讨论】:

  • 太好了 - 很高兴它有帮助
猜你喜欢
  • 2015-03-07
  • 2018-12-24
  • 2020-05-13
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多