Я пытаюсь использовать 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 не загружается.
Помоги мне.
@HPierce, готово. Я не знаю в чем проблема
Низкий уровень репутации для добавления в качестве комментария.
Взгляните на свой файл .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 (), который я забыл
Ваш обработчик не возвращает 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
});
Можно ли редактировать в
<form>
в вопрос? Я подозреваю, что ошибка в том, что написанный вами JS не связан с той формой, которую вы думаете.