У меня есть раздел комментариев формы, в котором пользователь может ответить на комментарий. Каждый комментарий имеет форму с ответным полем. Я получаю комментарии из базы данных и запускаю следующий цикл.
@foreach($responses as $response) <li>{{$response->answer}}</li> <form action="{{action('DiscussionController@postAnswerQuestion', [$entry_year, $grade_id, $subject_id, $question_id])}}" method="post" id="form1"> <input type="text" name="reply" value="" placeholder="Reply"> <input type="hidden" name="response_id" value="{{$response->id}}"> <input type="submit" name="" value="reply"> </form> @endforeach
Когда я отправляю php-форму, используя обычный PHP, она представляет только прекрасную, но при использовании jquery ajax и следующего кода.
var formData = { 'answer' : $('input[name=answer]').val(), 'reply' : $('input[name=reply]').val(), 'response_id' : $('input[name=response_id]').val(), };
Он возвращает значение первого ввода только после некоторого поиска в googling, который я нашел, что я должен использовать сериализацию, и поэтому вместо вышеупомянутого кода jquery я использовал следующее
var formData = $('#form1').serialize();
Но теперь значения arent фиксируются и значения приходят к php как null. Как решить эту проблему?
Большое спасибо, ребята!
Во-первых, замените id
на форму class
.
<form action="..." method="post" class="commentForm"> <input type="text" name="reply" value="" placeholder="Reply"> <input type="hidden" name="response_id" value="{{$response->id}}"> <input type="submit" name="" value="reply"> </form>
Затем зарегистрируйте обработчик отправки событий в формах, чтобы сделать вызов ajax. Внутри обратного вызова обработчика события this
относится к представленной форме. Вы можете использовать это, чтобы получить значения входов для этой формы.
$('.commentForm').submit(function(event) { event.preventDefault(); var $form = $(this); var formData = { answer : $form.find('input[name=answer]').val(), reply : $form.find('input[name=reply]').val(), response_id: $form.find('input[name=response_id]').val() }; // Make the ajax call here. });
Однако вы должны иметь возможность пропустить formData
объекта formData
и использовать для вызова ajax следующее:
data: $(form).serialize(),
Ваш код зацикливается и создает несколько форм с одинаковым именем текстовых полей, поэтому jquery не может распознать type = 'name', которые вы указываете при записи $ ('input [name = answer]'). Val ();
Поэтому я предлагаю вам добавить id ко всем трем входным тегам. Для каждого цикла все теги 3 должны иметь одинаковый идентификатор. Затем вы можете узнать их индивидуально.