gpt4 book ai didi

php - Laravel 5.0 ajax 请求保存 session 变量

转载 作者:行者123 更新时间:2023-12-03 20:30:32 25 4
gpt4 key购买 nike

我正在尝试使用 ajax 请求来保存用于禁用我网站背景图像的 session 变量。截至目前,如果我只是转到路由本身,它确实有效,但是,如果我通过 ajax 请求运行该函数,它会完全失败并且不会将值保存到 session ,即使它在 中显示它也是如此dd(Session::all()) 紧随其后。

<?php namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Session;
use Request;
use App;
use Response;

class SessionVarController extends Controller {

public function backgroundImgsOff()
{
if(Request::ajax())
{
Session::put(['backgroundImgDisable' => true]);
return Response::json();
}
else
{
App::abort(404, 'Page not found.');
}
}

public function backgroundImgsOn()
{
if(Request::ajax())
{
Session::forget(['backgroundImgDisable']);
return Response::json();
}
else
{
App::abort(404, 'Page not found.');
}
}

}

有谁知道为什么这似乎拒绝实际保存 session 变量?我在某处读到它可能与 session 状态有关,但是,我一直未能找到解决方案的提示。

编辑:这是我的 ajax(记住这是我第一次尝试 ajax)。

function enableBackgroundImages() {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","{{ action('SessionVarController@backgroundImgsOn') }}",true);
xmlhttp.send();
}
function disableBackgroundImages() {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","{{ action('SessionVarController@backgroundImgsOff') }}",true);
xmlhttp.send();
}

页面上的按钮如下:

<div id="background-on-off" style="display:inline-block;">
Background Images:
<a href="#" onClick="enableBackgroundImages();">
On
</a>
/
<a href="#" onClick="disableBackgroundImages();location.reload();">
Off
</a>
</div>

最后,这是我的路线:

Route::get('background_images_on', 'SessionVarController@backgroundImgsOn');
Route::get('background_images_off', 'SessionVarController@backgroundImgsOff');

谢谢。

最佳答案

您的 Controller 代码有效。这可能与您的路由或 ajax 调用方式有关。

routes.php

Route::post('background-imgs/disable','SessionVarController@backgroundImgsOff');
Route::post('background-imgs/enable','SessionVarController@backgroundImgsOn');

jQuery

  $("#on").on('click', function () {
var that = this;
$.ajax({
type: "POST",
url:'/background-imgs/enable'
});
});

$("#off").on('click', function () {
var that = this;
$.ajax({
type: "POST",
url:'/background-imgs/disable'
});
});

如果你愿意,你可以稍微规范化它并返回一个值,这样你就可以看到发生了什么。

routes.php

Route::post('background-imgs/{action}','SessionVarController@backgroundImages')
->where('action', '[enable]*[disable]*');

控制者

class SessionVarController extends Controller {

public function backgroundImages($action = 'enable')
{
if(!Request::ajax())
{
abort(404, 'Page not found.');
}
if ($action === 'enable'){
Session::forget(['backgroundImgDisable']);
return Response::json(['background' => 'enabled']);
}
Session::put(['backgroundImgDisable' => true]);
return Response::json(['background' => 'disabled']);

}

根据更新的问题进行编辑

您需要将 X-Requested-With header 添加到您的 XMLHttpRequest

Laravel 使用 Symfony检查它是否是 ajax 请求。

public function isXmlHttpRequest()
{
return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}

你的 javascript 代码应该是这样的。

function enableBackgroundImages() {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","{{ action('TestController@backgroundImgsOn') }}",true);
xmlhttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
xmlhttp.send();
}
function disableBackgroundImages() {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","{{ action('TestController@backgroundImgsOff') }}",true);
xmlhttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
xmlhttp.send();
}

您可能想查看 jQuery为了这。它为您的 JavaScript 增加了一点体积,但更容易处理。

你可以这样写你的方法。

function enableBackgroundImages() {
$.get("{{ action('SessionVarController@backgroundImgsOn') }}");
}
function disableBackgroundImages() {
$.get("{{ action('SessionVarController@backgroundImgsOff') }}");
}

关于php - Laravel 5.0 ajax 请求保存 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33487448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com