Cheizer
@Cheizer

Как передать AJAX ом многомерный массив в PHP?

Уже колпак рвет, вторые сутки бьюсь и не получается решить задачу, гуру кодинга, посмотрите пожалуйста, что не так, почему в консоли распечатывает массив, а в php пустота прилетает?

Есть форма на сайте, с обычными полями типа email, phone и тд, и есть SELECTы пользовтельские, создаются автоматом, количество неизвестно, результат каждого выбора селекта сохраняем в два скрытых поля, 1 это название селекта, 2 это выбор option. В результате имеем (для примера результат работы 2 селектов):

1 результат работы селекта
<input type="hidden" class="option" name="option[1][name]" value="РАЗМЕР">
<input type="hidden" class="option" name="option[1][val]" value="XL">

2 результат работы селекта
<input type="hidden" class="option" name="option[2][name]" value="ШТ">
<input type="hidden" class="option" name="option[2][val]" value="5">


Далее форма отправляется в form.js
Там куча проверок полей, анимации ошибок и тд, SERIALIZE поэтому не прокатит, так как все завязано на теге LABEL
пример
<label class="name">
<input type="text" value="" name="name" placeholder="Введите ваше имя:">
<span class="error error-empty">*</span>
</label>


Так же и остальные поля, это я к тому что serialize не подходит, далее все летит в js

submitFu: function () {
                            $.ajax({
                                type: "POST",
                                url: _.mailHandlerURL,
                                data: {
                                    name: _.getValFromLabel($('.name', _.form)),

                                    options: _.useroption  // вот тут наш массив
                                },
                            })
                    },

useroption: function(){ 
var options = [];
// передавать в пост можно только одномерный массив, 
// поэтому извращаемся с вот таким описанием данных'
$('input.option', _.form).each(function (i) {
    options['option[' + i + '][name]'] = $(this).val();
    options['option[' + i + '][val]'] = $(this).val();
});
console.log(options); 
},


В php нихера ничего не прилетает, или я опять накосячил и тут
$options = "";
if (isset($_POST["options"])) {
$options = $_POST["options"]; 
}

foreach ($options as $value){
$result .= '
<tr>
<td>
  '.$value[name].' 								
</td>
<td>
'.$value[val].' 
</td>
</tr>
';}

Далее вывожу $result в нужном месте.

Так вот где я накосячил? Почему ничего не прилетает php? Или я в php не так вывожу, НО если serialize использовать то все в php работает и прилетает, но serialize не подходит. ПАМАГИТИИ!
  • Вопрос задан
  • 364 просмотра
Решения вопроса 1
1. Почему не прокатит serialize? если все в данные в input, даже если input обернут в lable это не значит что данных в input нет
2. куда уходит запрос? если на другой домен например, то нужно проверить если разрешения на кросс доменные запросы
3. проверьте что приходит без ajax, просто отправьте форму, и посмотрите что в $_REQUEST
4. можете сделать скрин с console.log(form.serialize()); естественно где form - ваша форма
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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