ajax работает, но данные формы не отправляются

я использую контактную форму ajax, которая исчезает и показывает сообщение с благодарностью. И я также получаю почту после отправки формы. Но в ней нет данных, которые вводятся в форму. Я думаю, что данные формы не переход к handler.php .. Любая помощь, пожалуйста?

ajax.js

$(function() {

var theForm = $("#memberform");

theForm.validate({

submitHandler: function(theForm) {

$('#loader', theForm).html('Please Wait...');

$.ajax({
type: "POST",
url: "handler.php",
data: $(theForm).serialize(),
timeout: 20000,

    success: function(msg) { $(theForm).fadeOut((500, function(){ 

                $(theForm).html("<h2>Thank you. We will contact you shortly.</h2>").fadeIn(); 

                }));
            },

            error: $('.thanks').show()

        });

        return false;
    }
   });
});

обработчик.php

<?php


$to      = '[email protected]';
$subject = 'Contact Form';

$name = $_POST['senderName'];
$phone = $_POST['senderNumber'];
$email = $_POST['senderEmail'];
$message = $_POST['senderComments'];

$MESSAGE_BODY = "Name: ".$name."<br>"; 
$MESSAGE_BODY .= "Contact No: ".$phone."<br>"; 
$MESSAGE_BODY .= "Email: ".$email."<br>"; 
$MESSAGE_BODY .= "Message: ".nl2br($message)."<br>"; 

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'From: Companyname' . "\r\n";
$headers .= 'Reply-To: something.com' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
//$headers .= 'Bcc: [email protected]' . "\r\n";


mail($to, $subject, $MESSAGE_BODY, $headers);


?

скрипты, которые я связал в теге head поверх тега body.

<script src="js/jquery-3.1.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.validate.min.js"></script>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript" src="met.js"></script>

и я отредактировал файл web.config с правилом перезаписи, чтобы скрыть расширения .php от домена...

<rewrite>
        <rules>
    <rule name="Hide .php ext">
        <match ignoreCase="true" url="^(.*)"/>
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
            <add input="{REQUEST_FILENAME}.php" matchType="IsFile"/>
        </conditions>
        <action type="Rewrite" url="{R:0}.php"/>
    </rule>
    <rule name="Redirecting .php ext" stopProcessing="true">
        <match url="^(.*).php"/>
        <conditions logicalGrouping="MatchAny">
            <add input="{URL}" pattern="(.*).php"/>
        </conditions>
        <action type="Redirect" url="{R:1}"/>
    </rule>
   </rules>
</rewrite>

person cheesyblast    schedule 12.11.2016    source источник
comment
Вместо $(theForm).serialize() попробуйте theForm.serialize(). Это уже объект jQuery, нет необходимости снова передавать его через jQuery.   -  person maiorano84    schedule 12.11.2016
comment
привет,Спасибо за помощь.После редактирования ajax вообще не работает.Перенаправляет на handler.php и остается без изменений. @maiorano84   -  person cheesyblast    schedule 12.11.2016
comment
Где фактическая форма, которую вы сериализуете?   -  person Kiran Shakya    schedule 12.11.2016


Ответы (2)


Попробуйте это, может быть полезно

$(function() {
var theForm = $("#memberform");
var data =  theForm.serialize();
theForm.validate({
    submitHandler: function(theForm) {
        $('#loader', theForm).html('Please Wait...');
        $.ajax({
            type: "POST",
            url: "handler.php",
            data: data,
            timeout: 20000,
            success: function(msg) { $(theForm).fadeOut((500, function(){ 
                    $(theForm).html("<h2>Thank you. We will contact you shortly.</h2>").fadeIn();
                }));
            },
            error: $('.thanks').show();
        });return false;
    }
   });
});
person Soni Vimalkumar    schedule 12.11.2016
comment
не работает мой друг... ajax не работает. Он перенаправляет только на handler.php. - person cheesyblast; 12.11.2016
comment
ладно, в handler.php пишем echo ‹pre›;print_r($_POST);exit; и chcek анализируются ли данные из ajax или нет - person Soni Vimalkumar; 12.11.2016
comment
я не совсем профессионал в php ... так что я должен удалить все содержимое в handler.php и написать приведенный выше код? так что насчет ajax.js... должен ли я что-то редактировать? @Сони Вимал - person cheesyblast; 12.11.2016
comment
нет, просто напишите эту строку перед запуском вашего кода - person Soni Vimalkumar; 12.11.2016

Спасибо, что помогли мне с проблемой. Только что нашел ответ, удалив какое-то правило перезаписи. Проблема в web.config. Удаление правила перезаписи заставляет форму работать нормально...

Или, если вы хотите сохранить правило перезаписи и отправить форму, отредактируйте строку ---url: "handler.php"--- на url: "handler", и форма будет работать нормально.

person cheesyblast    schedule 12.11.2016