У меня есть форма, которая использует Ajax для проверки на стороне клиента. Конец формы следующий:
$.ajax({
url: 'mail3.php',
type: 'POST',
data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam,
success: function(result) {
//console.log(result);
$('#results,#errors').remove();
$('#contactWrapper').append('<p id="results">' + result + '</p>');
$('#loading').fadeOut(500, function() {
$(this).remove();
});
}
});
РЕДАКТИРОВАТЬ: это мой файл mail3.php с ошибками:
$errors=null;
if ( ($name == "Name") ) {
$errors = $nameError; // no name entered
}
if ( ($email == "E-mail address") ) {
$errors .= $emailError; // no email address entered
}
if ( !(preg_match($match,$email)) ) {
$errors .= $invalidEmailError; // checks validity of email
}
if ( $spam != "10" ) {
$errors .= $spamError; // spam error
}
if ( !($errors) ) {
mail ($to, $subject, $message, $headers);
//header ("Location: thankyou.html");
echo "Your message was successfully sent!";
//instead of echoing this message, I want a page redirect to thankyou.html
} else {
echo "<p id='errors'>";
echo $errors;
echo "</p>";
}
Мне было интересно, можно ли перенаправить пользователя на страницу с благодарностью, если запрос ajax успешен и ошибок нет. Это возможно?
Спасибо! Amit
Конечно. Просто поместите что-нибудь в конце вашей функции успеха, например:
if(result === "no_errors") location.href = "http://www.example.com/ThankYou.html"
, где ваш сервер возвращает ответ no_errors
, когда ошибок нет.
Вы можете просто перенаправить в обработчике success
, например:
window.location.href = "thankyou.php";
Или, если вы показываете результаты, подождите несколько секунд, например, это будет ждать 2 секунды:
setTimeout(function() {
window.location.href = "thankyou.php";
}, 2000);
В вашем файле mail3.php вы должны перехватывать ошибки в try {} catch {}
try {
/*code here for email*/
} catch (Exception $e) {
header('HTTP/1.1 500 Internal Server Error');
}
Тогда в вашем успешном
вызове вам не придется беспокоиться о своих ошибках , потому что он никогда не вернется в качестве успеха.
и вы можете использовать: window.location.href = "thankyou.php";
внутри вашей функции успеха, как заявил Ник.
Я думаю, вы можете сделать это с помощью:
window.location = "your_url";
Просто проверьте ошибки, и если все пройдет успешно, установите window.location
, чтобы перенаправить пользователя на другую страницу.
$.ajax({
url: 'mail3.php',
type: 'POST',
data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam,
success: function(result) {
//console.log(result);
$('#results,#errors').remove();
$('#contactWrapper').append('<p id="results">' + result + '</p>');
$('#loading').fadeOut(500, function() {
$(this).remove();
});
if ( /*no errors*/ ) {
window.location='thank-you.html'
}
}
});
Я полагаю, вы можете атаковать это двумя способами;
1) вставить window.location = 'http://www.yourdomain.com
в функцию success.
2) использовать дополнительный вызов ajax для инъекции этого в элемент на вашей странице, более подробную информацию о котором вы можете найти в документации jQuery по адресу http://api.jquery.com/jQuery.get/