Ray*_*Ray 4 php session jquery laravel laravel-4
我在使用laravel 4.1会话时遇到了问题并且出现了意外行为.
根据我调用控制器方法的方式,会话可以工作或不工作我的应用程序调用POST路由 - 将项目添加到作为会话的购物车.由于某种原因,会话不会更新.但是,如果我使用GET请求调用相同的函数,该函数将按预期工作.
我routes.php包含这两条路线:
Route::get('testAdd', array('uses' => 'ProductsController@addToCart'));
Route::post('products/addToCart', array('uses' => 'ProductsController@addToCart'));
Run Code Online (Sandbox Code Playgroud)
两者都指向相同的方法
该方法目前是这样的(用于测试):
public function addToCart() {
Session::put("addcarttest", "add to cart");
return json_encode(Session::get('addcarttest'));
}
Run Code Online (Sandbox Code Playgroud)
如果我使用POST方法调用该函数(使用表单数据),我会得到预期的结果和会话的内容.
但是,如果我然后检查会话(使用分析器)它不存在.数据没有持续存在.
如果我然后使用GET路由调用相同的方法,我得到预期的结果,但重要的是会话仍然存在.
我想也许POST方法删除了会话但是一旦它存在就会停留在那里 - 如果我使用GET方法并且sessin存在,如果我再次尝试POST方法示例会话保持原位 - 所以POST方法不会删除会话.
这让我发疯了 - 我已经失去了很多时间,看不出原因.
我错过了Laravel处理POST v GET的方法吗?为什么两种不同的方法会对底层函数产生影响?
我需要做什么才能使会话与POST一起正常工作?
更新:
我现在尝试了会话的数据库驱动程序,并获得了相同的行为.
我已经进一步测试了一个阶段 - 我创建了一个基本表单并提交给了url,并且该方法按预期工作.我目前的表单数据由jquery ajax提交,并假设它们在behviour中完全相同.
我的jquery提交函数是这样的:
$.ajax({
url: '/products/addToCart',
type: 'POST',
async: false,
})
.done(function() {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
return false;
Run Code Online (Sandbox Code Playgroud)
我将async设置为false - 我假设等待服务器响应.(如果是真的也不起作用).
所以问题是表单提交和ajax提交之间的细微差别.这两种方法都采用相同的路由和方法 - 一种方法保存会话数据 - 另一方法没有.
我怎么克服?Jquery提交对于应用程序的这一部分至关重要.
Ray*_*Ray 10
成功!
我发现了与laravel 3相关的类似问题.对于在ajax调用中持续存在的会话,我需要正确地返回响应.
return json_encode($response);
Run Code Online (Sandbox Code Playgroud)
这导致了这个问题.它似乎不是一个有效的响应,使会话能够持久存在.我改成了:
return Response::json($response);
Run Code Online (Sandbox Code Playgroud)
这使会话保持不变!
由于某种原因,正常表单提交或调用方法允许第一个,但ajax不允许.
我在其他地方看到了关于影响会话数据的方法中的echo语句的引用,但是我认为没有任何东西 - 我认为返回的行为必须类似于echo
现在开心(直到下一个问题)
这是触发解决方案的帖子:http: //forumsarchive.laravel.io/viewtopic.php?id = 1304
| 归档时间: |
|
| 查看次数: |
5569 次 |
| 最近记录: |