Jquery ajax все еще отправляет URL-адрес в строке URL-адресов при использовании $ .post

Я пытаюсь использовать ajax для отправки сообщения с помощью php. Но я все еще получаю запрос GET в строке URL вместо POST. URL-адрес всегда отображается в адресной строке.

Вот моя форма, код jquery и php

html-форма:

                <form class = "form-horizontal contactez">
                    <!-- Form Name -->
                    <legend>Laissez-nous un message</legend>

                    <!-- Text input-->
                    <div class = "form-group">
                      <label class = "col-md-4 control-label" for = "nom_m"></label>  
                      <div class = "col-md-4">
                      <input id = "nom_m" name = "nom_m" type = "text" placeholder = "Nom" class = "form-control input-md" class = "nom_m">

                      </div>
                    </div>

                    <!-- Text input-->
                    <div class = "form-group">
                      <label class = "col-md-4 control-label" for = "email_m"></label>  
                      <div class = "col-md-4">
                      <input id = "email_m" name = "email_m" type = "text" placeholder = "Email" class = "form-control input-md" class = "email_m">

                      </div>
                    </div>

                    <div class = "form-group">
                      <label class = "col-md-4 control-label" for = "objet"></label>  
                      <div class = "col-md-4">
                      <input id = "objet" name = "objet" type = "text" placeholder = "Sujet" class = "form-control input-md" class = "objet">

                      </div>
                    </div>

                    <!-- Textarea -->
                    <div class = "form-group">
                      <label class = "col-md-4 control-label" for = "message"></label>
                      <div class = "col-md-4">                     
                        <textarea class = "form-control" id = "message" name = "message" class = "message">Message</textarea>
                      </div>
                    </div>


                    <div class = "modal-footer d-flex justify-content-center">
                        <button class = "btn btn-indigo submitBtn" type = "submit"> Message <i class = "fa fa-paper-plane-o ml-1"></i></button>
                    </div>

                </form>

код jquery: $ (документ) .ready (функция () {

    $('.contactez').submit(function(){

        var nom_m = $('#nom_m').val();
        var email_m = $('#email_m').val();
        var message_m = $('#message').val();
        var objet_m = $('#objet');
        var reg = /^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i;

        if (nom_m.trim()==''){

            $('#nom_m').focus() ;
            return false ;

        } 
        else if (email_m.trim()=='')
        {
            $('#email_m').focus() ;
            return false ;
        }
        else if (objet_m.trim()=='')
        {
            $('#objet').focus() ;
            return false ;
        }
        else if (message_m.trim()=='')
        {
            $('#message').focus() ;
            return false ;
        }
        else if (email_m.trim()!='' && !reg.test(email_m))
        {
            bootbox.alert('Entrer une adresse mail valide');
            $('#email_m').focus();
            return false;
        }
        else
        {

            $.post("submit_message.php",{nom:nom_m,email:email_m,objet:objet_m,message:message_m},function(data){
                bootbox.alert('Message envoyé');

            }); 
        }
        return false ;
    });

});

php код:

<?php 
    require "install.php" ;

    $nom = htmlspecialchars($_POST['nom']) ;
    $email = htmlspecialchars($_POST['email']) ;
    $objet = htmlspecialchars($_POST['objet']);
    $message = htmlspecialchars($_POST['message']);

    if (isset($connection) && !empty($nom) && !empty($email) && !empty($message)){

        $to = "[email protected]";
        //$subject = $objet ;
        $headers = "From : ". $email ."\r\n";
        $headers .= 'Content-Type: text/HTML; charset=utf-8' . "\r\n";
        $headers .= 'Content-Transfer-Encoding: 8bit'. "\n\r\n";

        mail($to,$objet,$message,$headers); 
    }

 ?>

Я использую $ .post, но когда я проверяю код в браузере, я вижу метод запроса: GET. И файл php не загружается.

Помоги мне.

Можно ли редактировать в <form> в вопрос? Я подозреваю, что ошибка в том, что написанный вами JS не связан с той формой, которую вы думаете.

HPierce 27.10.2018 16:20

@HPierce, готово. Я не знаю в чем проблема

morten 27.10.2018 16:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Низкий уровень репутации для добавления в качестве комментария.

Взгляните на свой файл .htaccess. (Не настраивайте php, чтобы проверить его и указать, куда смотреть в данный момент). Я помню несколько проблем, которые могут возникнуть: файл .htaccess может перезаписать ваш URL-адрес и удалить расширение .php, поэтому вы можете либо попробовать поискать файл и изменить его, либо просто попробовать изменить свой URL-адрес на $.post("submit_message",..... Другой случай заключался в том, что в URL-адресе появлялась косая черта /, вызывающая проблемы. В основном проблема заключается в том, что некоторые настройки приводят к тому, что ваш запрос перенаправляется на GET.

Вот шаги, которые я предпринял для отладки этого:

Во-первых, явно запретите обработчик событий по умолчанию для отправки формы. Мы надеемся, что это сделано, чтобы отловить любые ошибки, которые возникают до того, как функция попадет в return false;.

$('.contactez').submit(function(e){
    e.preventDefault();
    // ... 
}

Теперь, когда вы запустите код, вы получите эту ошибку

Ваш скрипт дает сбой до того, как у него появится возможность return false и заблокировать отправку формы, поэтому ваш браузер использует поведение по умолчанию, когда форма отправляется путем перенаправления (это то, что вы видите, когда говорите, что адресная строка меняется).

Вам, наверное, просто нужно добавить .val() в эту строчку var objet_m = $('#objet').

$('.contactez').submit(function(e){

    e.preventDefault();

    var nom_m = $('#nom_m').val();
    var email_m = $('#email_m').val();
    var message_m = $('#message').val();
    var objet_m = $('#objet').val();
    var reg = /^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i;

    // ...
}

Я получаю еще одну ошибку на странице, связанную с тем, что bootbox не определяется, но я подозреваю, что это просто зависимость, которую вы здесь не обсуждали. Надеюсь, шаг e.preventDefault() даст вам достаточно инструментов для продолжения отладки.

Удачи!

Спасибо. Работает. Это был .val (), который я забыл

morten 27.10.2018 17:23
Ответ принят как подходящий

Ваш обработчик не возвращает false, потому что у вас есть ошибка в одном из ваших назначений:

var objet_m = $('#objet');

Затем строка else if (objet_m.trim()=='') вызывает следующую ошибку:

TypeError: objet_m.trim is not a function

Если вы хотите, чтобы форма не была отправлена, используйте preventDefault(), который также позволяет удалить все эти return false из вашей функции.

$('.contactez').submit(function(evt) {
  evt.preventDefault();
  var nom_m = $('#nom_m').val();
  var email_m = $('#email_m').val();
  var message_m = $('#message').val();
  var objet_m = $('#objet').val();
  var reg = /^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i;
  // Rest of the function ommited
});

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