JQuery submit () vc click () в модальной форме

У меня есть форма внутри Bootstrap Modal, 2 текстовых ввода и кнопка отправки. Я хочу отправить данные формы в контроллер Laravel без обновления текущей страницы (где отображается Modal).

Сначала я использовал функцию jQuery click (), и она сделала то, что я ожидал (отправленные данные, выполнение контроллера, возврат JSON и оценка JSON с правилами успеха / ошибки и без обновления).

Когда я изменил код на функцию jQuery submit (), данные были отправлены, контроллер выполнил их, вернул JSON, НО теперь браузер показывает простой текст JSON. Код внутри успеха / ошибки не был выполнен.

Почему происходит такое разное поведение между этими двумя функциями?

JS - с помощью click ():

$(document).ready(function(){
        $('button#ajaxSubmit').click(function(e){


        e.preventDefault();

        $.ajaxSetup({
            headers: {
            'X-CSRF-TOKEN': $('meta[name = "_token"]').attr('content')
            }
        });
        jQuery.ajax({
            url: "{{ url('/question') }}",
            method: 'POST',
            data: $('#form_pergunta').serialize(),
            success: function(result){
                $('#form_pergunta')[0].reset();
                $('#myModal_Pergunte').modal('hide');
                msgbox_Text = "Sua pergunta foi incluída com sucesso!" ;
                $("#msgbox_alertmsg").append(msgbox_Text);
                $('#myModal_MsgBox').modal('show');
            },
            error: function (data, textStatus, errorThrown) {
                console.info(data);
            },
        });
    });
});

JS - с submit ():

то же самое выше, но изменить

 $('button#ajaxSubmit').click(function(e)  

к

$('#form_pergunta').submit(function(e)

HTML

    <div class = "modal fade bd-example-modal-lg" id = "myModal_Pergunte" tabindex = "-1" role = "dialog" >
  <div class = "modal-dialog modal-lg">

     <!-- Modal content-->
     <div class = "modal-content">
        <div class = "modal-header">
           <h5 class = "modal-title">Title</h5>
           <button type = "button" class = "close" data-dismiss = "modal">X</button>
       </div>
       <div class = "modal-body">

        <form method = "POST"  action = "{{ url('/question')}}" id = "form_pergunta">
            {{ csrf_field() }}

            <div class = "form-group">
             <label for = "formGroupTextArea">What is your question? </label>
             <textarea type = "text" class = "form-control" id = "formGroupTextArea" placeholder = "Faça sua pergunta utilizando até 250 caracteres." rows = "8" maxlength = "250" name = "form_question" required></textarea>
             <h6 class = "float-right pt-1 text-muted" id = "count_message"></h6>

         </div>
         <div class = "form-group">
             <label for = "formGroupInputUrl">Link opcional</label>
             <input type = "text" class = "form-control" id = "formGroupInputUrl" placeholder = "Caso deseje, inclua um link que faça referência a pergunta" name = "form_url" maxlength = "250">
         </div>
     </div> 
     <div class = "modal-footer">
         <input type = "submit" class = "btn btn-primary" name = "btn_submit" id = "ajaxSubmit" >Submit</button>
     </div>

     </form>
</div>
</div>
</div>

Было бы легче ответить, если вы поделитесь кодом обоих вариантов. Проблема может быть во многих местах.

f-CJ 22.08.2018 20:28

Оба равны, за исключением используемой функции: от $('button#ajaxSubmit').**click**(function(e) ... до $('button#ajaxSubmit').**submit**(function(e){

Paulo 22.08.2018 20:38

Не могли бы вы поделиться своим HTML

f-CJ 22.08.2018 20:39

Конечно, только что отредактировал вопрос.

Paulo 22.08.2018 20:42

Кажется, я только что обнаружил «ошибку». Раньше <input> был <button>. Итак, jQuery '$ (' button # ajaxSubmit ')', нацеленный на предыдущий '<button>', также должен быть изменен на '$ (' input # ajaxSubmit ')' или '$ (' # ajaxSubmit ')', верно?

Paulo 22.08.2018 20:45

Проверьте мой ответ.

f-CJ 22.08.2018 20:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
36
1

Ответы 1

Вы должны прикрепить обработчик события отправки к HTML-элементу form, а не к кнопке, потому что именно элемент form вызывает событие отправки, а не кнопку. Итак, вы должны сделать что-то вроде этого:

$('#form_pergunta').submit(function(e) { ... }

Вместо:

$('button#ajaxSubmit').submit(function(e){ ... }

f-CJ, я тестировал оба, разное поведение сохраняется. Важно отметить, что с обеими функциями форма отправляется и выполняется Контроллером. Проблема возникает с обработкой возврата / ответа.

Paulo 22.08.2018 21:02

Другие вопросы по теме