const url = `${route("url")}?${obj}`;
let ID = 3 //рандомный id
let obj = new URLSearchParams({
"ID[]": ID,
});
for (const ID of obj.get(
"ID[]"
)) {
console.log("ID: ", ID);
console.log("ID: ", typeof ID);//тут должен быть number
}
https://example.com/api/method?NUM=123&STR=abc
null
.// повтор имени
?id=1&id=2
// то же, с квадратными скобками
?arr[]=3&arr[]=4 // будет ?arr%5B%5D=3&arr%5B%5D=4
// перечисление через разделитель:
?id=5,6
URLSearchParams.toString()
поступает как первые два варианта:const usp = new URLSearchParams();
usp.append('id', 1);
usp.append('id', 2);
usp.append('arr[]', 3);
usp.append('arr[]', 4);
usp.toString()
// "id=1&id=2&arr%5B%5D=3&arr%5B%5D=4"
?a=A&b=B
удобнее их передавать в теле запроса, не GET'ом, а POST или PUT запросом. Уточните у бэка, сумеет ли он принять JSON в теле POST-запроса? const url = `${route("url")}?${obj}`;
data
оказывается массив ID'шек. Достаточно его значения по одному добавить append'ом():const childBlock = document.querySelectorAll('.child-block');
// const elem = document.querySelectorAll('.elem');
// const amount = document.querySelectorAll('.amount');
document.querySelectorAll('.btn-all').forEach(n => {
n.addEventListener('click', onGetDataClick);
});
let data;
const key = 'ID[]';
function onGetDataClick({ target }) {
data = Array.from(target.closest('.child-block').querySelectorAll('.elem')).flatMap(n =>
Array(+n.querySelector('input').value).fill(+n.dataset.id)
);
console.log(data);
const usp = new URLSearchParams();
data.forEach(id => usp.append(key, id));
const url = `https://example.com/api/method?${usp.toString()}`;
console.log('URL: %s', url);
}
// counter
const max = Math.max(2);
const min = Math.min(0);
childBlock.forEach(button => {
button.addEventListener('click', e => {
const isPlusBtnOne = e.target.classList.contains('btn__plus-one');
const isMinusBtnOne = e.target.classList.contains('btn__minus-one');
const isPlusBtnTwo = e.target.classList.contains('btn__plus-two');
const isMinusBtnTwo = e.target.classList.contains('btn__minus-two');
const counterBlock = e.target.closest('.elem');
if (isPlusBtnOne || isMinusBtnOne || isPlusBtnTwo || isMinusBtnTwo) {
const input = counterBlock.querySelector('.amount');
if (isPlusBtnOne || isPlusBtnTwo) {
input.value = Number(input.value) + 1;
if (input.value >= max) {
input.value = max;
}
}
if (isMinusBtnOne || isMinusBtnTwo) {
input.value = Number(input.value) - 1;
if (input.value <= min) {
input.value = min;
}
}
}
});
});
let object = new URLSearchParams({
'ID[]': data,
})
Только вариант с добавления ключ-значение по одному. Как я предложил выше. forEach(... append() ...)