Я делаю простой сайт с 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');
}
}
});
}
Я думаю, что нужно немного разъяснений.
Первая смена 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);
}
}
Других решений пока нет …