Ajax POST в PHP не обнаружен - PullRequest
       1

Ajax POST в PHP не обнаружен

0 голосов
/ 07 сентября 2018

У меня есть эта функция для отправки форм:

function submit_form(form) {
            $( form ).submit(function(e) {
                // Prevent form submission
                e.preventDefault();

                // Get the form instance
                var $form = $(e.target);

                // Use Ajax to submit form data
                $.ajax({
                    url : '/section' + $form.attr('action'),
                    type: "POST",
                    data: $form.serialize(),
                    mimeType: "multipart/form-data",
                    contentType: false,
                    cache: false,
                    processData:false,
                    success:function(data, textStatus, jqXHR) {
                        console.log(data);
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        //if fails
                    }
                });
            });
        }

, который отправляет запрос POST на страницу PHP.

на моей странице PHP у меня есть

if($_POST)
    echo 'form posted';
    exit();
}

Это нормально обрабатывается, но «данные» не возвращают «отправленная форма»

Я вызываю функцию в теге формы:

<form id="edit_group" method="post" action="page.php" onsubmit="submit_form(\'#edit_group\');">

В дополнение к комментариям / convo, пожалуйста, смотрите ниже код, который я использую:

Мой код выглядит так:

<?php
if($_POST) {
    echo 'post';
    exit();
}
?>

<form id="edit_group" class="ajax_form" method="post" action="/page.php">

</form>

<script type="text/javascript">
$('.ajax_form').submit(function(e) {
    // Prevent form submission
    e.preventDefault();

    // Get the form instance
    var $form = $(e.target);

    // Use Ajax to submit form data
    $.ajax({
        url : '/section' + $form.attr('action'),
        type: "POST",
        data: $form.serialize(),

        contentType: false,
        cache: false,
        processData:false,
        success:function(data, textStatus, jqXHR) {
            console.log("hi");
            console.log(data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            //if fails
        }
    });
});
</script>

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Итак, через комментарии к вопросу было проработано несколько вопросов.

Создание обработчика событий при отправке формы

Логика изначально имела встроенный onsubmit для формы с методом, который логически создавал обработчик события отправки в форме. Однако для обработки события обработчик события должен существовать до того, как событие произойдет. Так что это приведет к тому, что обработка не произойдет в первый раз. Если отключить onsubmit и выполнить метод один раз для создания привязки логического события, это исправит его работу в первый раз (а не несколько раз), когда форма будет отправлена.

contentType: false

По умолчанию jQuery устанавливает ContentType на application/x-www-form-urlencoded, то есть то, что отправляет нормальная форма для запроса. Это говорит серверу обрабатывать строку и / или тело запроса URL определенным образом. В этом случае следует ожидать, что он будет в формате строки запроса и может автоматически анализировать запрос в любой конструкции, ожидаемой вашим языком. Для PHP это будут переменные $ _GET / $ _ POST / $ _ REQUEST.

Задавая значение false, вы говорите jQuery не размещать этот заголовок там. Поэтому без заголовка PHP не знает, что ему нужно загрузить $ _GET или $ _POST из тела, потому что он не знает, как структурированы данные.

Удаление этой опции из запроса ajax позволяет jQuery делать по умолчанию, что позволяет PHP загружать переменную $ _POST, что приводит к условному функционированию, как вы ожидаете.

0 голосов
/ 07 сентября 2018

Попробуйте это.

Избавьтесь от своей функции submit_form(form) и просто оставьте обработчик отправки.

        $( form ).submit(function(e) {
            // Prevent form submission
            e.preventDefault();

            // Get the form instance
            var $form = $(e.target);

            // Use Ajax to submit form data
            $.ajax({
                url : '/section' + $form.attr('action'),
                type: "POST",
                data: $form.serialize(),
                mimeType: "multipart/form-data",
                contentType: false,
                cache: false,
                processData:false,
                success:function(data, textStatus, jqXHR) {
                    console.log(data);
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    //if fails
                }
            });
        });

Также измените HTML-разметку на эту. (Удалить атрибут onsumbit)

<form id="edit_group" method="post" action="page.php" >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...