laravel 4 постоянных данных – jquery ajax submit

У меня проблемы с сеансами laravel 4.1 и неожиданное поведение.

В зависимости от того, как я вызываю метод контроллеров, сеанс работает или не выполняет мое приложение на POST-маршруте – для добавления элементов в корзину, которая является сеансом. По какой-то причине сеанс не обновляется. Однако, если я вызываю одну и ту же функцию с запросом GET, функция работает так, как ожидалось.

Мои routes.php содержат эти два маршрута:

 Route::get('testAdd', array('uses' => 'ProductsController@addToCart')); Route::post('products/addToCart', array('uses' => 'ProductsController@addToCart')); 

Оба указывают на тот же метод

В настоящее время этот метод (для тестирования):

 public function addToCart() { Session::put("addcarttest", "add to cart"); return json_encode(Session::get('addcarttest')); } 

Если я вызову функцию методом POST (с данными формы), я получу ожидаемый результат и содержимое сеанса.

Однако, если я затем проверяю сеанс (используя профилировщик), он не существует. Данные не сохранялись.

Если я затем вызову тот же метод с использованием маршрута GET, я получу ожидаемый результат, но важно, чтобы сессия продолжалась.

Я подумал, что, возможно, метод POST удалял сеансы, однако, когда он существует, он остается там – если я использую метод GET и существует sessin, если я затем снова попытаюсь использовать пример метода POST, сеанс остается на месте – поэтому метод POST не удаляет сеанс.

Это сводит меня с ума – я потерял много часов и не понимаю, почему.

Я что-то упустил из-за того, как Laravel обрабатывает POST v GET? Почему два разных метода имеют значение для базовых функций?

Что мне нужно сделать, чтобы сеанс работал правильно с помощью POST?

Обновить:

Теперь я попробовал драйвер базы данных для сеанса и получаю такое же поведение.

Я уже прошел мой этап: я создал базовую форму и представил URL-адрес, и метод работал так, как ожидалось. Мои текущие данные формы передаются jquery ajax и предполагают, что они были довольно идентичными по своему характеру.

Моя функция отправки 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; 

Я установил async в false – я предполагаю, что жду ответа сервера. (не работает, если это правда).

Таким образом, проблема заключается в тонкой разнице между формой submit и ajax submit. Оба метода используют один и тот же маршрут и метод – один сохраняет данные сеанса, а другой – нет.

Как я могу победить? Jquery submit имеет важное значение для этой части приложения.

Успех!

Я нашел аналогичную проблему, связанную с laravel 3. Для того, чтобы сессия сохранялась в вызове ajax, мне нужно правильно вернуть ответ.

 return json_encode($response); 

Это вызывает проблему. Это не похоже на действительный ответ, чтобы сеанс сохранялся. Я изменил его на:

 return Response::json($response); 

Это позволило сохранить сессию!

По какой-то причине нормальная форма отправки или вызова метода допускает первый, но ajax этого не делает.

Я видел ссылки в другом месте об эхо-утверждениях в методе, влияющих на данные сеанса, но не думал, что у меня есть – возвращение, я полагаю, должно вести себя подобно эхо-сигналу

Счастливый теперь (до следующей проблемы)

Это сообщение, которое вызвало решение: http://forumsarchive.laravel.io/viewtopic.php?id=1304

У меня такие же проблемы, но при возврате ответа XML, а не JSON.

Я исправил его с помощью сохранения сеанса.

 \Session::put('LOGADO.ID_LOJA', $id_loja.time()); \Session::save(); 

Это фиксировало все внутри вызовов AJAX.

Это касается решения, которое дал Рэй. У меня была очень похожая проблема, решение которой разрешилось. Первоначально у меня было следующее на моем контроллере:

 echo json_encode(array('auth' => $auth)); 

Я изменил это на:

 return Response::json(array('auth' => $auth)); 

Однако это было лишь частью решения. В моем файле javascript я изначально имел:

 data = $.parseJSON(data); 

Который, если бы я сохранил эхо в контроллере … был бы необходим. очевидно, что Laravel будет делать магию за кулисами при использовании Response :: json (), так что возвращаемые данные уже разбираются. Удаление этой строки в моем файле javascript снова вызвало все радость 🙂