2013-04-02 7 views
0

Привет Я пытаюсь отправить данные по электронной почте. Я использую PHP mail() для отправки электронной почты и Ajax для отправки данных, чтобы избежать перезагрузки страницы. Письмо не отправляется при отправке формы. Что я делаю не так? Код выглядит несколько так.избегая страницы после перезагрузки после отправки формы

Аякса:

$('#submit').click(function(){ 

    $.ajax({ 
     url: test.php, 
     type:'POST', 
     success: function(msg){ 
       alert('Email Sent'); 
      }     
     }); 
    }); 

HTML форма:

<table width="400" border="0" cellspacing="2" cellpadding="0"> 
    <tr> 
     <td>*Your name:</td> 
     <td><input name="name" type="text" id="name" size="32"></td> 
    </tr> 
    <tr> 
     <td class="bodytext">*Email address:</td> 
     <td><input name="email" type="text" id="email" size="32"></td> 
    </tr> 
    <tr> 
     <td class="bodytext"> </td> 
     <td align="left" valign="top"><input type="submit" name="Submit" id="submit" value="Send"></td> 
    </tr> 
</table> 

PHP:

<?php 
if ($_POST["email"]<>'') { 
    $ToEmail = '[email protected]'; 
    $EmailSubject = 'Fusio Dose customer info'; 
    //$mailheader = "From: ".$_POST["email"]."\r\n"; 
    //$mailheader .= "Reply-To: ".$_POST["email"]."\r\n"; 
    //$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
    $MESSAGE_BODY = "Name: ".$_POST["name"]."\r\n"; 
    $MESSAGE_BODY .= "Email: ".$_POST["email"]."\r\n"; 
    $MESSAGE_BODY .= "Primary: ".$_POST["primary"]."\r\n"; 
    $MESSAGE_BODY .= "Sedcondary: ".$_POST["secondary"]."\r\n"; 
    //$MESSAGE_BODY .= "Comment: ".nl2br($_POST["comment"]).""; 
    mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 
?> 

Рабочий пример здесь

http://soumghosh.com/otherProjects/Kemail/emailTest1.html

+0

Как далеко доходит ваш скрипт? Вы получаете сообщения об ошибках? – jcbwlkr

+0

нет действительно. Я не получаю сообщение об ошибке. – soum

ответ

2

Вы можете сериализовать форму и отправить ее на страницу PHP. Попробуйте это, и он не отправит страницу:

$('#contact_form').submit(function() { 
    alert($(this).serialize()); // check to show that all form data is being submitted 
    $.post("test.php",$(this).serialize(),function(data){ 
     alert(data); //check to show that the email sent successfully       
    }); 
    return false; // return false to stop the page submitting. You could have the form action set to the same PHP page so if people dont have JS on they can still use the form 
}); 
+0

user1048676- спасибо, что это очень близко. Я собираюсь уточнить это. Еще раз спасибо – soum

+0

Я должен признать, что использование сериализации довольно чертовски умно. – Ares

0

Изменить вызов функции этой

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

    e.preventDefault(); 
    //The rest of your code. 

    $.ajax({ 
    url: test.php, 
    type:'POST', 
    data: { name: $("#name").val(), email: $("#email").val() } // and so on 
    success: function(msg){ 
      alert('Email Sent'); 
     }     
    }); 
}); 



} 
+0

@ ares- cannt использовать предупреждение по умолчанию, потому что он убивает интерактивность на странице. Я попробовал ваш метод – soum

0

Вы фактически не передавая значения из формы через в запросе AJAX, просто сделать «пустой» запрос POST в. Вы должны смотреть на форму плагин AJAX, он будет делать тяжелую работу за вас:

http://www.malsup.com/jquery/form/

Смежные вопросы