Я пытаюсь использовать запрос ajax для сохранения переменной сеанса, которая используется для отключения фоновых изображений моего сайта. На данный момент это работает, если я просто перехожу на сам маршрут, однако, если я запустил функцию через запрос ajax, она полностью завершится и не сохранит значение для сеанса, даже если оно отобразится в dd(Session::all())
сразу после ,Laravel 5.0 ajax запрос сохранения переменной сеанса
<?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.');
}
}
}
Кто-нибудь знает, почему это похоже на отказ от сохранения переменной сеанса? Я где-то читал, что это может иметь отношение к состояниям сеанса, однако я не смог найти столько, сколько намек на решение.
EDIT: вот мой 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('[email protected]') }}",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('[email protected]') }}",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', '[email protected]');
Route::get('background_images_off', '[email protected]');
Благодарности.
Это действительный пункт. И на самом деле, @Logan Hasbrouck, возвращая прямой ответ JSON на представление, - единственный способ пойти сюда. Причина этого в том, что представление не «знает» о смене «сеанса», которое произошло во время вызова Ajax. Однако изменение будет отражено после загрузки следующей страницы. Передайте состояние изображения в представление, сделайте то, что вам нужно в обратном вызове Ajax, и переменная Session останется на месте для будущих запросов. – lesssugar
@lesssugar Когда пользователь нажимает для отключения фоновых изображений, сразу после отправки и получения запроса ajax я автоматически перезагружаю страницу, чтобы изменения вступили в силу. Я взгляну на свои маршруты. На данный момент я настроил его как запрос на получение. –
Все еще не работает. Я предполагаю, что я перепутал где-то с моим аяксом, так как это мой первый раз, когда я пытаюсь использовать ajax. Я добавил свой код ajax и кнопки, которые вызывают функции ajax. –