Sending emails with AJAX is a common feature in a Web 2.0 application. jQuery can actually ease this process through its $.ajax() wrapper. To accomplish this task, you basically need a server side script for processing data and sending the email. For example, if you use PHP, you need something like this:
header('Content-Type: text/plain');
$subject = $_POST['subject'];
$message = $_POST['message'];
$email_from = 'you@site.com';
$to = $_POST['to'];
$headers = "From: John" . " " . "Doe" . " " . "<". $email_from . ">" . "\r\n";
$recipient = "<" . $to . ">";
if(mail($recipient, $subject, $message, $headers)) {
echo '<p class="success">Email sent successfully.</p>';
} else {
echo '<p class="error">Problem with sending email.</p>';
}
Adding jQuery is quite easy at this point:
function sendEmail() {
$('#email-form').submit(function() {
var subject = $('#email-form #subject').val();
var message = $('#email-form #message').val();
var to = $('#email-form #to').val();
var data = 'to='+to+'&subject='+subject+'&message='+message;
$.ajax({
type: 'POST',
url: 'http://yoursite.com/mail.php',
data: data,
success: function(html) {
$(html).appendTo('#email-form');
}
});
return false;
});
}
Note two things in our example:
- I've used
return falseto prevent the form from performing its default action (that is, opening the URL specified in theactionattribute) - I've served the response as
text/plain, because it's considerably faster than other types of responses.