具有成功的Ajax请求的页面重定向

时间:2010-08-18 15:50:14

标签: javascript jquery ajax redirect

我有一个使用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请求成功且没有错误,是否可以将用户重定向到Thank You页面。这可能吗?

谢谢! 阿米特

10 个答案:

答案 0 :(得分:36)

不确定。只需在成功函数的最后添加一些内容,例如:

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

当没有错误时,服务器返回响应no_errors

答案 1 :(得分:15)

只是做一些错误检查,如果一切都通过,那么设置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'
        }

    }
});

答案 2 :(得分:11)

您可以在success处理程序中重定向,如下所示:

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

或者,因为您正在显示结果,请等待几秒钟,例如,这将等待2秒钟:

setTimeout(function() {
  window.location.href = "thankyou.php";
}, 2000);

答案 3 :(得分:2)

在你的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";,如Nick所述。

答案 4 :(得分:2)

$.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"

        }
    });

答案 5 :(得分:0)

我认为你可以这样做:

window.location = "your_url";

答案 6 :(得分:0)

我想你可以通过两种方式攻击它;

1)将window.location = 'http://www.yourdomain.com插入成功函数。

2)使用另一个ajax调用将此注入到页面上的元素中,您可以在http://api.jquery.com/jQuery.get/

的jQuery文档中找到更多信息。

答案 7 :(得分:0)

我在不同的帖子上发布了确切的情况。再后。

对不起,这不是上述问题的答案。

但是带来了一个有趣的话题---何时使用AJAX以及何时不使用AJAX。在这种情况下,最好不要使用AJAX。

让我们举一个简单的登录和密码示例。如果登录名和/或密码不匹配,那么使用AJAX报告一条说“登录不正确”的简单消息会很好。但是如果登录名和密码是正确的,为什么我必须回调AJAX函数才能重定向到用户页面?

在这种情况下,我认为使用简单的表单提交会很不错。如果登录失败,重定向到Relogin.php,它看起来与Login.php相同,网址中有一条GET消息,如Relogin.php?error = InvalidLogin ...就像那样......

只需2美分。 :)

答案 8 :(得分:0)

另一个选择是:

window.location.replace("your_url")

答案 9 :(得分:-1)

// 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>";
}