Эта проблема относительно сложна, хотя бы, чтобы объяснить.
Я настраиваю Ajax для быстрой работы с моим плагином Crinsane ShoppingCart для Laravel.
Мой интерфейс позволяет вам купить товар из списка товаров. Это делается с помощью Ajax и работает нормально. Когда товар вставлен в вашу корзину, в нижней части появляется небольшая панель со всем содержимым корзины. Здесь есть форма для отправки (просто пустой ввод), где вы можете ввести желаемое количество каждого продукта.
Со мной так далеко?
Я получаю содержимое корзины с помощью другой функции AJAX, которая также отлично работает.
Проблема заключается в вводе обновления пустого количества в нижней панели. Это работает, но только после того, как я обновил страницу. Когда я набираю нужное количество в поле ввода, ничего не происходит. Но когда я обновляю его, он работает так, как я хочу.
Я подозреваю, что сессия Cart или что-то еще должно быть должным образом загружено обновлением, прежде чем какие-либо функции Ajax с активным вводом смогут начать работу. Хотя это кажется странным, учитывая, что в этом весь смысл ajax.
Мой Ajax (для ввода нижней строки):
<?php
for($i=0;$i<$cartAmount; $i++){
?>
var _token = $("input[name='_token']").val();
function insert_cartBar(qty = '')
{
$.ajax({
url: '<?php echo url('/cart/bar');?>/'+ $('#cart-product-id-<?php echo
$i;?>').val(),
method:'POST',
data:{
qty:qty,
_token:_token,
rowId: $('#cart-bar-id-<?php echo $i;?>').val(),
id: $('#cart-product-id-<?php echo $i;?>').val(),
},
dataType:'json',
success:function(data)
{
$('#cartResult').text(data.cartCount);
console.log('eyyy' + data.rowId);
},
error: function(data) {
var errors = data.responseJSON;
console.log(errors);
},
});
}
$(document).on('keyup', '#cart-<?php echo $i?>', function(){
var qty = $(this).val();
insert_cartBar(qty);
});
Мой контроллер Laravel:
public function cartBarPost(Request $request, $id) {
$cartContent = Cart::content();
$product = Product::find($id);
$rowId = $request->rowId;
$qty = $request->qty;
if($qty != '') {
Cart::update($rowId, $qty);
}
$cartCount = Cart::count();
$data = array(
'cartCount' => $cartCount,
'id' => $id,
'rowId' => $rowId,
'qty' => $qty,
);
echo json_encode($data);
}