Ответ 1
Конечно. Просто поставьте что-то в конце своей функции успеха, например:
if(result === "no_errors") location.href = "http://www.example.com/ThankYou.html"
где ваш сервер возвращает ответ no_errors
, когда нет ошибок.
У меня есть форма, которая использует 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();
});
}
});
EDIT: это мой файл 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
, когда нет ошибок.
Просто выполните некоторую проверку ошибок, и если все пройдет, установите 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'
}
}
});
Вы можете просто перенаправить в свой обработчик 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');
}
Затем в вашем вызове success
вам не придется беспокоиться о своих ошибках, потому что он никогда не вернется с успехом.
и вы можете использовать: window.location.href = "thankyou.php";
внутри вашей функции успеха, как заявил Ник.
$.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(result === "no_errors") location.href = "http://www.example.com/ThankYou.html"
}
});
Я думаю, вы можете сделать это с помощью
window.location = "your_url";
Я предполагаю, что вы можете атаковать это двумя способами:
1) вставьте window.location = 'http://www.yourdomain.com
в функцию успеха.
2) Используйте еще один вызов ajax, добавьте его в элемент на своей странице, дополнительную информацию о котором вы можете найти в документах jQuery в http://api.jquery.com/jQuery.get/
Я разместил точную ситуацию в другом потоке. Re-пост.
Извините, это не ответ на вопрос, который был выше.
Но возникает интересная тема --- КОГДА использовать AJAX и когда НЕ использовать AJAX. В этом случае неплохо использовать AJAX.
Давайте рассмотрим простой пример логина и пароля. Если логин и/или пароль не совпадают, желательно использовать AJAX для отправки простого сообщения с надписью "Login Notorrect". Но если логин и пароль правильные, почему мне нужно вызвать функцию AJAX для перенаправления на страницу пользователя?
В подобном случае это, я думаю, было бы просто приятно использовать простую форму SUBMIT. И если сбой входа в систему, переадресовать на Relogin.php, который выглядит так же, как и Login.php с сообщением GET в URL, например Relogin.php? Error = InvalidLogin... что-то вроде этого...
Только мои 2 цента.:)
// Create lag time before redirecting
setTimeout(function() {
window.location.href = "thankyou.php";
}, 2000);
$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);
echo "Your message was successfully sent!";
//instead of echoing this message, I want a page redirect to thankyou.html
// redirect
setTimeout();
} else {
echo "<p id='errors'>";
echo $errors;
echo "</p>";
}