function removeItem(e) {
if (e.target.classList.contains("close")) {
let price = JSON.parse(localStorage.getItem("price") || "[]");
let sumAfterRemove = price.reduce((acc, curr) => acc + curr.price, 0); //пересчет суммы
localStorage.setItem("price", JSON.stringify(price)); //перезапись объектов
//клик на отрисованный объект до перезагрузки страницы, например
//было 2 объекта остался пустой массив, а после перезагрузки страницы удаляет правильно
//(было 2 объекта и при клике на Х остаётся 1 объект в массиве )
localStorage.setItem("sumPrice", JSON.stringify(sumAfterRemove)); //перезаписываю сумму
getSumPriceToRender(); //рендерю в разметку текущий результат суммы
}
}
https://example.com/api/method?NUM=123&STR=abc
null
.присутствует кодировка %5B%5D которую ajax запрос видимо с помощью своей магии добавил в url.Это квадратные скобки, которые скорее всего говорят о нескольких инпутах с одним именем. Ну или данные в переменой - массив. Обычный url encode.
В fetch же кодировка не имеется и я получаю статус 500.Стоит посмотреть ошибку, которая отдается с сервера.
Подскажите пожалуйста как можно решить задачу.Неплохо бы зайти в инструменты разработчика и сравнить нетворк запросы от "аякса" и фетч, в частности как выглядит пэйлоад. Тогда будет понятно куда копать, хотя серверная ошибка и так должна по идее дать ответ.
[
[ '.btn-all', 'click', onGetDataClick ],
[ '.elem button', 'click', onPlusMinusClick ],
[ '.amount', 'input', onAmountInput ],
].forEach(([ selector, type, handler ]) => {
document.querySelectorAll(selector).forEach(n => n.addEventListener(type, handler));
});
function onGetDataClick(e) {
const data = Array.prototype.flatMap.call(
e.target.closest('.child-block').querySelectorAll('.elem'),
n => Array(+n.querySelector('.amount').value).fill(+n.dataset.id)
);
console.log(data);
}
function onPlusMinusClick({ target }) {
const input = target.closest('.elem').querySelector('.amount');
input.value -= target.innerText === '+' ? -1 : 1;
input.dispatchEvent(new Event('input'));
}
function onAmountInput({ target: t }) {
t.value = Math.max(t.min, Math.min(t.max, t.value | 0));
}
if (currentCars.length > 0) {
for (let car of currentCars) {
renderFormCar(car);
}
}
function renderFormCar (currentCar) {
let type = currentCar?.CarType || "";
let model = currentCar?.Model || "";
let passCarClone = document.createElement("div");
passCarClone.classList.add("car-item");
passCarClone.innerHTML = `
<span class="remove">X<span>
<input type="text" class="form__car-type" placeholder="Введите тип" value="${type}">
<input type="text" class="form__car-model" placeholder="Введите Марка и Модель тр. ср-ва" value="${model}">
<div></div>
<button class="primary-btn" type="submit">Применить</button>`;
passCar.append(passCarClone);
};
addCar.addEventListener("click", function () {
renderFormCar();
passCar.addEventListener("click", function (e) {
if (e.target.classList.contains("remove")) {
e.target.parentNode.remove();
}
});
});
const params = new URLSearchParams({
FreightID: 1,
CabinCategoryID: 2,
Age16: parseInt(3),
Age12: parseInt(4),
Age5: parseInt(5),
Age1: parseInt(6),
Accommodation: 7,
});
const url = `${route( "TariffCalculationPassenger" )}${params}`
const xCSRFTOKEN = document.querySelector('meta[name="_token"]').getAttribute("content")
const options = {
method: 'GET',
headers: {
"X-CSRF-TOKEN": xCSRFTOKEN
}
};
const response = await fetch(url, options)
// Получаем массив с объектами
const arr = localeStorage.getItem('foo')
// Ищем нужный объект по id
const item = arr.find(i => i.id === 1) // если работаем с объектами, помним, что мы получаем ссылку на объект
// Если находим, меняем какое то значение
if (item) item.key = 123123
// Записываем массив с измененными данными в localeStorage
localeStorage.setItem('foo', arr)