я пытаюсь добавить товары в свою корзину с помощью ajax в laravel, но я получаю сообщение об ошибке 419 (статус неизвестен).
вот мой код ajax:
function btnAddCart(param) {
var product_id = param;
var url = "{{ route('cart.add') }}";
$.ajax({
type: "POST",
url: url,
data: { product_id: product_id },
success: function (data) {
console.info(data);
},
error: function (data) {
console.info('Error:', data);
}
});
};
вот моя функция контроллера laravel
public function addToCart(Request $request)
{
$product = Product::findOrFail($request->input('product_id'));
$cart = session()->has('cart') ? session()->get('cart') : [];
if (array_key_exists($product->id, $cart)) {
$cart[$product->id]['quantity']++;
} else {
$cart[$product->id] = [
'title' => $product->title,
'quantity' => 1,
'unit_price' => $product->sale_price,
];
}
session(['cart' => $cart]);
session()->flash('message', $product->title.' added to cart.');
$data = [];
$data['cart'] = session()->has('cart') ? session()->get('cart') : [];
return response()->json($data);
}
Итак, как мне вернуть данные json в функцию успеха ajax.
спасибо, но я получаю ту же ошибку.
Ага; Ошибка 419 связана с тем, что вы не передаете токен CSRF. См. laravel.com/docs/5.7/csrf и добавьте некоторую логику для его передачи или игнорирования для маршрутов API.
Спасибо вам, это работает.
Без проблем! Не стесняйтесь опубликовать свое решение в качестве ответа.






Добавьте токен csrf в раздел заголовка html:
<meta name = "csrf-token" content = "{{ csrf_token() }}">
После этого добавьте это в свой раздел js:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')
}
});
Есть ли проблема с этим кодом? Вы говорите «Я получил ошибку», но конкретно какая ошибка? На первый взгляд, единственное, что я вижу, это то, что
$request->input(1)должен быть$request->input('product_id'), но в остальном, пока ваш PHP работает, он должен возвращать ответ JSON и быть доступным через ваш функция успеха.