我在通过 ajax 在 laravel 中设置 cookie 时遇到了问题。我已经阅读了很多问题/帖子,但都无济于事。
我有一个下拉列表,当更改时,使用 js 将其值发布到设置 cookie 并返回带有该 cookie 的响应的 Controller ,然后页面在 ajax 完成时刷新,并在 document.ready 脚本中,它调用一个 get cookie 路由,该路由从该 cookie 中检索值。似乎没有发送 cookie?我知道获取路径有效,就好像我在其他地方设置了 cookie 一样,它会正确检索它。我还使用 headers_sent() 来确保在设置 cookie 和返回响应之前尚未发送 header 。我还尝试了一些我在其他 SO 问题和答案中看到的不同方法,包括 Cookie::queue、$response->withCookie($cookie) 和 $response->headers->setCookie($cookie),无我发现其中的工作。
我的做法有问题吗?还是更有可能是语法问题?
我的javascript:
function trans(lang){
$.post( 'cookie/set' , {'name':'language', 'value':lang, 'timeout':-1})
.done(function(data){
removeEvent();
}).always(function(){
window.location.reload();
});
}
cookie/set 的 Controller 函数:
public function postSet(){
$name = Input::get('name');
$value = Input::get('value');
$timeout = Input::get('timeout');
if(Request::ajax()){
Log::info('cookie', array('name'=>$name, 'value'=>$value, 'timeout'=>$timeout));
$cookie = Cookie::make($name, $value, $timeout);
$response = Response::make();
$response->headers->setCookie($cookie);
return $response->withCookie($cookie);
}
}
doc.ready javascript:
$(document).ready(function(){
$.post( 'cookie/get' , {'name':'language'})
.done(function(data){
if (!data){
alert('no cookie');
}
$("#language").val(data);
removeEvent();
});
})
最后是 cookie/get Controller 函数:
public function postGet(){
$name = Input::get('name');
define('__TRANSLATEMODE',"raw");
return Cookie::get($name);
}
再次,我可以确认 get 路由正常工作。我的想法是以某种方式没有从 set ajax 调用的响应中返回 cookie,但我不明白为什么。
在此先感谢您的帮助! -沃利
编辑:
我查看了 firebug 中的请求和响应,似乎来自 postSet 路由的响应不包含 cookie。我有点怀疑这一点。但至少这确定了问题的根源。仍然不确定为什么它不想工作。
编辑 2:
我解决了。不完全确定为什么会这样,但下面的代码现在可以工作了。似乎返回一个空响应不会发送 cookies 吗?我不知道,至少它已经解决了。我会在允许的时候回答这个问题,并将其标记为已接受。 (如果有人知道为什么要修复它,将不胜感激。)
public function postSet(){
$name = Input::get('name');
$value = Input::get('value');
$timeout = Input::get('timeout');
Cookie::queue($name, $value, $timeout);
$response = Response::make();
return Response::make('test');
}
感谢看过的人,希望这对其他人有帮助。 -沃利
最佳答案
我可以看到您有一个带有获取路由的 js Post 函数。这在 Laravel 中不起作用。
不确定这是否是整个问题,但检查路线肯定会帮助您缩小范围。
关于javascript - Laravel 使用 Ajax 设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278659/