Fortoo
@Fortoo
Top-Web OpenCart

Как объединить ключи и значения объекта или get параметров строки?

Я понимаю как это сделать с использованием POST или AJAX, но как это сделать в классическом запросе?
Если форма фильтра

6701839e97c83720259706.png
<form id="filter_get" class="filter" method="GET">
    <!-- первая колонка имеет скрытый input который наполняется ползунком -->
    <div class="filter-col">
        <div class="filter-item filter-item-2x">
            <a class="filter-heading">Площадь дома</a>
            <div id="place_get">
                <input name="svfilter_place" value="125;557">
            </div>
        </div>
    </div>

    <!-- вторая колонка имеет input-ы checkbox -->
    <div class="filter-col">
        <div class="filter-item">
            <a class="filter-heading">Тип дома</a>
            <div id="stage" class="filter-hidden-wrapper">
                <div class="filter-stage">
                    <div class="filter-select">
                        <input id="category-input-1" type="checkbox" value="67" name="svfilter_category[]">
                        <label for="category-input-1">Газобетонные дома</label>
                    </div>
                    <div class="filter-select">
                        <input id="category-input-2" type="checkbox" value="62" name="svfilter_category[]">
                        <label for="category-input-2">Деревянные дома</label>
                    </div>
                    <div class="filter-select">
                        <input id="category-input-3" type="checkbox" value="68" name="svfilter_category[]">
                        <label for="category-input-3">Керамо-блочные дома</label>
                    </div>
                    <div class="filter-select">
                        <input id="category-input-4" type="checkbox" value="66" name="svfilter_category[]">
                        <label for="category-input-4">Кирпичные дома</label>
                    </div>
                </div>
            </div>
        </div>
        <div class="filter-item">
            <a class="filter-heading">Архитектурный стиль</a>
            <div id="style" class="filter-hidden-wrapper">
                <div class="filter-stage">
                    <div class="filter-select">
                        <input id="style-input-1" type="checkbox" value="Фахверк" name="svfilter_style[]">
                        <label for="style-input-1">Фахверк</label>
                    </div>
                    <div class="filter-select">
                        <input id="style-input-2" type="checkbox" value="Хайтек" name="svfilter_style[]">
                        <label for="style-input-2">Хайтек</label>
                    </div>
                    <div class="filter-select">
                        <input id="style-input-3" type="checkbox" value="Современный" name="svfilter_style[]">
                        <label for="style-input-3">Современный</label>
                    </div>
                    <div class="filter-select">
                        <input id="style-input-4" type="checkbox" value="Кантри" name="svfilter_style[]">
                        <label for="style-input-4">Кантри</label>
                    </div>
                    <div class="filter-select">
                        <input id="style-input-5" type="checkbox" value="Барнхаус" name="svfilter_style[]">
                        <label for="style-input-5">Барнхаус</label>
                    </div>
                    <div class="filter-select">
                        <input id="style-input-6" type="checkbox" value="Райт" name="svfilter_style[]">
                        <label for="style-input-6">Райт</label>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>


Мне нужно отправить через адресную строку GET параметры такого вида (как это сделать?):
https://site/catalog?svfilter_place=125;557&svfilter_category=67,62


Когда я сериализую данные
$('#button-filter').on('click', function() {
    var myForm  = $("#filter_get").serializeArray();
})

то получаю
myForm [{"name":"svfilter_place","value":"125;557"},{"name":"svfilter_category","value":"67"},{"name":"svfilter_category","value":"62"}]


если конвертировать этот Объект в строку, то получаю одинаковые ключи....
https://site/catalog?svfilter_place=125;557&svfilter_category=62&svfilter_category=63


а такой GET параметр при отправке ломается
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
Fortoo
@Fortoo Автор вопроса
Top-Web OpenCart
Решил таким способом

$('#button-filter').on('click', function() {
    var params = $("#filter_get").serializeArray();
    var result = {};

    $.each(params, function(_, field) {
        if (result[field.name]) {
            result[field.name] += ',' + field.value;
        } else {
            result[field.name] = field.value;
        }
    });

    var queryString = $.param(result);
    var page_link = '{{action}}';//URL страницы без get параметров (TWIG)
    window.location = page_link + '&' + queryString;
});


И все параметры name без квадратных скобок

name="svfilter_category"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы