Я пытаюсь настроить корзину с проверкой jQuery ajax, функция на моей стороне сервера пока работает без сбоев, моя настоящая проблема - после добавления товара в корзину. Имя элемента должно менять цвет, чтобы указать, что элемент уже выбран, но необходимо вручную обновить страницу, чтобы начать изменение цвета имени элемента.
Вот картинка ниже:
После того, как я нажму кнопку «+», вот результат:
Как вы можете видеть на картинке, я обвил выбранный элемент, цвет которого должен измениться после выбора элемента.
Пожалуйста, посмотрите код здесь:
$(document).ready(function(){
$(".form-item").submit(function(e){
var form_data = $(this).serialize();
var button_content = $(this).find('button[type=submit]');
button_content.html('Adding...'); //Loading button text
$.ajax({ //make ajax request to cart_process.php
url: "cart_process.php",
type: "POST",
dataType:"json", //expect json value from server
data: form_data
}).done(function(data){ //on Ajax success
$("#cart-info").html(data.items); //total items in cart-info element
button_content.html('+'); //reset button text to original text
alert("Item added to Cart!"); //alert user
if ($(".shopping-cart-box").css("display") == "block"){ //if cart box is still visible
loadinc(); //trigger to update data
}
})
e.preventDefault();
});
//Show Items in Cart
function loadinc(){
$(document).ready(function(){
$(".shopping-cart-box").show(); //display cart box
$("#shopping-cart-results" ).load( "cart_process.php", {"load_cart":"1"}); //Make ajax request using jQuery Load() & update results
});
}
loadinc();
});
А вот HTML-файл
<?php
//List products from database
$results = $mysqli_conn->query("SELECT * FROM tbldata where category = 'SALAD'");
if (!$results){
printf("Error: %s\n", $mysqli_conn->error);
exit;
}
//Display fetched records as you please
$products_list = '<ul class = "products-wrp">';
while($row = $results->fetch_assoc()) {
$products_list .= '
<li>
<form class = "form-item">
<h4>'.
(in_array($row["name"],array_column($_SESSION["products"],'name')) ? '<span style = "color:#b91e2d;">'.$row["name"].'</span>' : $row["name"])
.'</h4>
<div>Price : '.$currency.' '.$row["price"].'<div>
<div class = "item-box">
<div>
Qty :
<select name = "product_qty">
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
<option value = "4">4</option>
<option value = "5">5</option>
</select>
</div>
<input name = "product_code" type = "hidden" value = "'.$row["product_code"].'">
<button type = "submit">+</button>
</div>
</form>
</li>
';
}
$products_list .= '</ul></div>';
echo $products_list;
?>
в вашей функции done - success добавьте свой css, чтобы изменить цвет выбранного элемента, вам не хватает вашего стиля там
привет @karthik, мой стиль находится в моем html файле, я включил сокращенный оператор if, чтобы проверить, выбрана ли переменная в массиве.
Ваша жизнь была бы намного проще с таким фреймворком, как Vue, просто предложение
Я новичок, сэр, мне нужно изучить больше, прежде чем я перейду к другому фреймворку :(






Вы забыли эту строчку:
.css('color', '#b91e2d');
Как это:
$(document).ready(function(){
$(".form-item").submit(function(e){
var title = $(this).closest('span');
var form_data = $(this).serialize();
var button_content = $(this).find('button[type=submit]');
button_content.html('Adding...'); //Loading button text
$.ajax({ //make ajax request to cart_process.php
url: "cart_process.php",
type: "POST",
dataType:"json", //expect json value from server
data: form_data
}).done(function(data){ //on Ajax success
$("#cart-info").html(data.items); //total items in cart-info element
button_content.html('+'); //reset button text to original text
alert("Item added to Cart!"); //alert user
title.css('color','#b91e2d');
if ($(".shopping-cart-box").css("display") == "block"){ //if cart box is still visible
loadinc(); //trigger to update data
}
})
e.preventDefault();
});
//Show Items in Cart
function loadinc(){
$(document).ready(function(){
$(".shopping-cart-box").show(); //display cart box
$("#shopping-cart-results" ).load( "cart_process.php", {"load_cart":"1"}); //Make ajax request using jQuery Load() & update results
});
}
loadinc();
});
А также ваш товар должен быть:
$products_list .= '
<li>
<form class = "form-item">
<h4><span'.
(in_array($row["name"],array_column($_SESSION["products"],'name')) ? ' style = "color:#b91e2d;" : "")
. '>' . $row["name"] . '</span></h4>'...etc.
он не запускается, сэр, его также необходимо обновить перед изменением цвета
Вам нужно поймать элемент, который вы нажимаете, и сохранить его в переменной. Я отправлю редактирование с полным кодом.
это не работает, сэр. Я попытался поместить имя класса в свой диапазон и вызвать его после функции предупреждения, но ничего не изменилось, поэтому необходимо обновить страницу, чтобы изменить цвет имени (in_array ($ row ["name"], array_column ($ _ SESSION [ "products"], 'n ame'))? '<span class = "testing" style = "color: # b91e2d;">'. $ row ["name"]. '</span>': $ row ["название"])
Это потому, что вы печатаете «<span>», только если продукт выбран. Поэтому, когда это не так (помните, что ajax запускается ПОСЛЕ загрузки вашего PHP), там нет промежутка для изменения стиля. Посмотрите мой обновленный ответ.
это не работает, сэр. необходимо обновить страницу для работы.
я что-то упустил? Ошибка синтаксического анализа: синтаксическая ошибка, непредвиденный ';'
Спасибо, ребята, за помощь.
Мне нужно положить
window.location.reload();
после функции оповещения.
Спасибо, парни. : D
Основной причиной использования AJAX является перезагрузка страницы избегать.
Да, это неправильный ответ. Я ищу ответ @NiMusco, мое плохое.
Так что измените примененный CSS там, где вы делаете
alert("Item added to Cart!");