Сессия не работает до второго запроса

Я делаю простой сайт с Laravel и в моем PagesController У меня есть функция, которая сохраняет элемент в сессию и увеличивает cartCount если элемент еще не сохранен в сеансе.

На моем веб-сайте есть кнопка для каждого элемента, которая при нажатии отправляет 'item_id' используя AJAX на сайт, где функция postToCart вызывается. Что я хочу сделать, это вернуть item_name когда элемент успешно добавлен.

Когда я нажимаю кнопку в первый раз, она говорит мне, что элемент был добавлен, что я и хочу. Проблема в том, что когда я нажимаю кнопку во второй раз, функция postToCart снова вводит оператор if. Проблема только во втором посте запроса, все отлично работает после этого.

public function postToCart(Request $request) {
$id = $request->input('item_id');
$item = Item::all()->where('item_id', '=', $id)->first();

if (!session()->has($id))
{
session()->put($id, 1);
session(['cartCount' => session('cartCount') + 1]);

return $item->item_name;
}
}

AJAX на стороне клиента:

function cart_click(id, url) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

$.ajax({
type: 'POST',
url: url,
data: {
'item_id': id
},
success: function(result){
if (result)
{
alert('Item added: '.concat(result));
}
else
{
alert('Item already in cart');
}
}
});
}

0

Решение

Я думаю, что нужно немного разъяснений.

Первая смена postToCart() функция для возврата некоторого значения в обоих случаях (Успех + Отказ)

public function postToCart(Request $request) {
$id = $request->input('item_id');
$item = Item::all()->where('item_id', '=', $id)->first();

$value = session($id, 0);
if ($value == 0)
{
session([$id => 1]);
session(['cartCount' => session('cartCount') + 1]);

return $item->item_name;
}

return "1";
}

Во-вторых, в функции обратного вызова AJAX проверьте возвращаемое значение, если есть правильные значения сообщений, четко показывающие, что произошло. например Я поставил «1», так как для представления уже существует, в противном случае я предположил, что он успешно вставлен.

success: function(result){
if (result == "1")
{
alert('Item already in cart');
}
else
{
alert('Item added: ' + result);
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector