Перенаправление страницы с успешным запросом Ajax - PullRequest
40 голосов
/ 18 августа 2010

У меня есть форма, которая использует 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

Ответы [ 10 ]

36 голосов
/ 18 августа 2010

Конечно.Просто поместите что-нибудь в конец вашей функции успеха, например:

if(result === "no_errors") location.href = "http://www.example.com/ThankYou.html"

, где ваш сервер возвращает ответ no_errors, когда нет ошибок.

15 голосов
/ 18 августа 2010

Просто выполните некоторую проверку ошибок, и если все пройдет, установите 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'
        }

    }
});
11 голосов
/ 18 августа 2010

Вы можете просто перенаправить в свой обработчик success, например:

window.location.href = "thankyou.php";

Или, так как вы выводите результаты, подождите несколько секунд, например, это подождет 2 секунды:

setTimeout(function() {
  window.location.href = "thankyou.php";
}, 2000);
2 голосов
/ 24 октября 2016
$.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"

        }
    });
2 голосов
/ 18 августа 2010

В вашем файле mail3.php вы должны перехватывать ошибки при попытке {} catch {}

try {
    /*code here for email*/
} catch (Exception $e) {
    header('HTTP/1.1 500 Internal Server Error');
}

Тогда при вызове success вам не придется беспокоиться о своих ошибках, потому что он никогда не вернется как успех.

и вы можете использовать: window.location.href = "thankyou.php"; внутри вашей функции успеха, как сказал Ник.

0 голосов
/ 31 октября 2018

Другой вариант:

window.location.replace("your_url")
0 голосов
/ 25 июня 2016

Я выложил точную ситуацию в другой ветке.Повторно опубликовать.

Извините, это не ответ на вопрос, опубликованный выше.

Но приносит интересную тему - КОГДА использовать AJAX, а когда НЕ использовать AJAX.В этом случае не стоит использовать AJAX.

Давайте рассмотрим простой пример логина и пароля.Если логин и / или пароль не совпадают, было бы неплохо использовать AJAX, чтобы сообщить простое сообщение «Логин неверен».Но если логин и пароль верны, зачем мне вызывать функцию AJAX для перенаправления на страницу пользователя?

В таком случае, я думаю, было бы просто неплохо использовать простую форму SUBMIT,И если вход в систему не удается, перенаправьте на Relogin.php, который выглядит так же, как Login.php с GET-сообщением в URL, например Relogin.php? Error = InvalidLogin ... что-то в этом роде ...

Простомои 2 цента.:)

0 голосов
/ 12 сентября 2014
// 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>";
}
0 голосов
/ 18 августа 2010

Полагаю, вы можете атаковать это двумя способами:

1) вставить window.location = 'http://www.yourdomain.com в функцию успеха.

2) Использовать дополнительный вызов ajax для внедрения этого в элемент навашу страницу, дополнительную информацию о которой вы можете найти в документации jQuery по адресу http://api.jquery.com/jQuery.get/

0 голосов
/ 18 августа 2010

Я думаю, что вы можете сделать это с:

window.location = "your_url";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...