https://example.com/api/method?NUM=123&STR=abcnull.присутствует кодировка %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)