Передача многомерного массива через Ajax
Добрый день!
Имеется форма с чекбоксами, ссылка на скрин ниже https://ibb.co/dpQtWT Код вывода чекбоксов
<div class="row filter-selects">
<?php if(!empty($filters["manufacturers"])): ?>
<div class="col-md-3 select">
<label>Производитель:</label><br />
<div class="search" name="manufacturer">
<?php foreach ($filters["manufacturers"] as $value => $m ): ?>
<span>
<input type="checkbox" class="manufacturer" name="manufacturer" id="<?=$m?>" value="<?=$value?>">
<label class="button-check-label" for="<?=$m?>">
<?=$m?>
</label>
</span>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
<?php if(!empty($filters["amperages"])): ?>
<div class="col-md-3 select">
<label class="text-nowrap">Номинальный ток:</label><br />
<div class="search" name="amperage">
<?php foreach ($filters["amperages"] as $value => $a): ?>
<span>
<input type="checkbox" class="button-check" name="amperage" id="<?=$a?>" value="<?=$value?>">
<label class="button-check-label" for="<?=$a?>">
<?=$a?>
</label>
</span>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
...
</div>
Получение значений с чекбоксов, а так же код передачи через ajax
var result = [];
result["manufacturer"] = [];
result["amperage"] = [];
result["type"] = [];
result["charging"] = [];
result["kz"] = [];
result["protection"] = [];
$('[name="manufacturer"]:checked').each(function() {
result["manufacturer"].push($(this).val());
});
$('[name="amperage"]:checked').each(function() {
result["amperage"].push($(this).val());
});
$('[name="type"]:checked').each(function() {
result["type"].push($(this).val());
});
$('[name="charging"]:checked').each(function() {
result["charging"].push($(this).val());
});
$('[name="kz"]:checked').each(function() {
result["kz"].push($(this).val());
});
$('[name="protection"]:checked').each(function() {
result["protection"].push($(this).val());
});
//result = JSON.stringify(result);
console.log(result);
$.ajax({
method: "POST",
url: "index.php?route=extension/module/compare/filterCount",
dataType: 'json',
data: result,
})
Так же, пробовал через функцию map
var result =[];
result["manufacturer"] = $('[name="manufacturer"]:checked').map(function(id, element){return $(element).val();});
result["amperage"] = $('[name="amperage"]:checked').map(function(id, element){return $(element).val();});
result["type"] = $('[name="type"]:checked').map(function(id, element){return $(element).val();});
result["charging"] = $('[name="charging"]:checked').map(function(id, element){return $(element).val();});
result["kz"] = $('[name="kz"]:checked').map(function(id, element){return $(element).val();});
result["protection"] = $('[name="protection"]:checked').map(function(id, element){return $(element).val();});
В консоли строит массив нормально - https://ibb.co/gfLG38 А при передачи на сторону сервера - пустой массив. Работаю с ларавелем, на стороне сервера,В файле php принимаю методом
public function filterCount() {
var_dump($this->request->post);
);
}
Метод ларавеля, выводит все, что пришло в посте. Не понимаю, почему на сервер приходит пустой массив |
$(форма).serialize() без всяких each ... push
и проверить консоль PS. А флажки именовать как name="manufacturer[]" и т.п. |
нашел проблему. В формировании массива var result = []; нужно использовать не квадратные скобки, а фигурные
var result = {}; |
Цитата:
|
А поподробней, если не сложно?
|
Цитата:
JQ же имеет две функции для сериализации данных формы для передачи их, serializeArray как раз дает на выходе то, что вы кучей строк и делаете. При этом как и браузер JQ не поместит в набор не выбранные флажки. Но вот именование флажков у вас по самой сути очень странное, как вы на сервере разбираетесь что кому принадлежит? |
Да, я пробовал так именовать - name="manufacturer[]". Не знал, как с этим работать, пришлось идти в обход. Массив формируется как надо теперь и передается на сервер.
Этот скрипт для фильтрации используется, данные заполняются по ключам [manufacturer => [1,2,3], amperage=> [...]] на сервере принимаю этот массив, разбиваю на отдельные массивы manufacturer => [1,2,3], amperage=> [...] и тд и уже с этими данными работаю |
Цитата:
Но почему foreach ($filters["manufacturers"] as $value => $m ) и id="<?=$m?>" value="<?=$value?>", что здесь все таки идентификатор, а что значение? |
Цитата:
|
А что есть тогда ID флажков?
|
| Часовой пояс GMT +3, время: 20:51. |