使用AJAX时,Laravel会话数据未写入/更新/在视图中不可用

使用AJAX时,Laravel会话数据未写入/更新/在视图中不可用,ajax,laravel-4,Ajax,Laravel 4,当我在控制器操作中使用Session::put()向会话添加内容时,在执行AJAX请求时,使用Session::get()在我的视图中该数据不可用 前一个包也有同样的问题,我用它来构建漂亮的表单。它依赖于通过会话传递一些信息,会话用于将字段标记为有效/无效。使用AJAX时,此功能也不起作用 我像往常一样设置视图,在我的视图中: $this->layout->content = View::make('account.login') 对于AJAX请求,我不使用常规的布局方式进行渲染,

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

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

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

$this->layout->content = View::make('account.login')
对于AJAX请求,我不使用常规的布局方式进行渲染,而是获取模板的特定“内容”部分并返回它:

$this->layout->content->renderSections()['content']
  • 当我执行“正常”请求时,会话数据工作正常
  • 当我执行AJAX请求时,就会忽略AJAX调用期间控制器中的会话数据集。AJAX调用之前的任何会话数据集都可用
我想知道Laravel是否对AJAX调用下的会话或上面的“renderSection()”方法有问题?

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

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

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

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

我也有同样的问题,只是找到了一个可能的解决方案:

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

return json_encode($response);
这就是问题的根源。它不是一个有效的响应,可以使会话持久化。将其更改为:

return Response::json($response); 
这使会话能够持久化

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

我在别处看到过关于影响会话的方法中的echo语句的引用——我认为返回的行为必须类似于echo

这是触发解决方案的帖子:

我遇到了一个类似的问题—使用ajax向购物车函数提交表单。会话是在函数中创建的,但一旦我移动到另一个方法(如get cart),会话就不存在或不创建!你能解决问题吗?那太好了-很高兴它有帮助