Не удается передать дополнительные данные формы с данными переключателя в php через ajax

#javascript #ajax

#javascript #ajax

Вопрос:

У меня есть простая форма, в которой есть переключатель и 2 скрытых поля. Я хочу передать значение переключателя и значение скрытых полей через ajax на страницу php. Значение переключателя передается нормально, но не скрытые поля — нет. Я жестко запрограммировал значения для table и id на странице php, чтобы убедиться, что значение переключателя передается для тестирования.

 <input type="radio" name="contract" value="0" class="custom-switch-input">
<input type="radio" name="contract" value="1" class="custom-switch-input">
<input type="radio" name="contract" value="2" class="custom-switch-input">

<input type="hidden" name="table" value="timber_sales">
<input type="hidden" name="id" value="177">

$(document).ready(function(){
   $('input[type="radio"]').click(function(){
        var contract = $(this).val();

        $.ajax({
             url:"edit_do.php",
             method:"POST",
             data:{contract:contract,id:id,table:table},
        });
   });
});
  

Комментарии:

1. Помимо отсутствующего вопроса в тексте вопроса (читай: недостаточно тега In question), что еще вы пробовали и потерпели неудачу? Обратитесь к вопросам SO о SO, почему они не работают у вас.

Ответ №1:

Вы устанавливаете значение contract в вашем прослушивателе событий, но не id или table .

Чтобы заставить это работать так, как у вас это есть в настоящее время, вам также нужно выполнить поиск в dom для значения ваших скрытых полей.

 var contract = $(this).val();
var id = $('input[name="id"]').val();
var table = $('input[name="table"]').val(); 
  

Комментарии:

1. Если опубликованного мной ответа недостаточно, попробуйте пометить свой вопрос как javascript, чтобы увидеть, получите ли вы более широкий набор ответов.

Ответ №2:

Сначала вам нужно получить значения из скрытых полей. Точно так же, как вы сделали с $(this).val() для значения переключателя. Итак:

 $(document).ready(function(){
   $('input[type="radio"]').click(function(){
        var contract = $(this).val();
        var id = $('input[name=id]').val();
        var table = $('input[name=table]').val();

        $.ajax({
             url:"edit_do.php",
             method:"POST",
             data:{
               contract: contract,
               id:id,
               table:table
             },
        });
   });
});
  

Вероятно, лучше присвоить скрытым полям уникальный атрибут ID и получить их через $('#myuniqueid').val() , но, по крайней мере, вышеуказанное работает до тех пор, пока у вас нет других полей с именем ID или table.

Комментарии:

1. Это отлично сработало. я изменю его на предпочтительный метод, как вы предложили.

Ответ №3:

Ваше событие jquery не знает о скрытых полях. Попробуйте это:

             <form id="form1">
                <input type="radio" name="contract" value="0" class="custom-switch-input">
                <input type="radio" name="contract" value="1" class="custom-switch-input">
                <input type="radio" name="contract" value="2" class="custom-switch-input">

                <input type="hidden" name="table" value="timber_sales">
                <input type="hidden" name="id" value="177">
            </form>
            <form id="form2">
                <input type="radio" name="contract" value="0" class="custom-switch-input">
                <input type="radio" name="contract" value="1" class="custom-switch-input">
                <input type="radio" name="contract" value="2" class="custom-switch-input">

                <input type="hidden" name="table" value="timber_sales">
                <input type="hidden" name="id" value="177">
            </form>
            $(document).ready(function(){
                $('form').change(function(){
                    event.preventDefault();

                    var send = $(this).data();

                    $.ajax({
                        url:"edit_do.php",
                        method:"POST",
                        data:send,
                    });
                });
            });    
  

Комментарии:

1. Еще один быстрый вопрос. Что, если у меня на этой странице несколько форм с разными идентификаторами. (Цикл While из базы данных) Когда пользователь изменяет значение с помощью переключателя в одной из форм, как я могу убедиться, что форма используется с моим предыдущим примером?

2. Этот код работает только с этой формой (id = form). Если вы добавите еще один — ничего не произойдет при изменении другой формы.

3. Как я могу изменить код, чтобы использовать любую форму, выбранную пользователем для внесения изменений?

4. Отредактируйте ответ на это. Теперь код срабатывает при изменении всех форм на странице. Если вы хотите указать действия — используйте if($(this).id() == ‘form1’)

5. Эти идентификаторы создаются из цикла while в зависимости от количества строк в базе данных. Каждый из получает следующий номер, т. е. Идентификатор формы = 1 идентификатор формы = 2 идентификатор формы = 3. Куда пойдет этот код?