Javascript 使用成功的Ajax请求进行页面重定向

Javascript 使用成功的Ajax请求进行页面重定向,javascript,jquery,ajax,redirect,Javascript,Jquery,Ajax,Redirect,我有一个使用Ajax进行客户端验证的表单。表格末尾如下所示: $.ajax({ url: 'mail3.php', type: 'POST', data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam, success: function(result) { //console.log(result);

我有一个使用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();

            });

        }
    });
$.ajax({
url:'mail3.php',
键入:“POST”,
数据:'contactName='+name+'&contactEmail='+email+'&spam='+spam,
成功:功能(结果){
//控制台日志(结果);
$(“#结果,#错误”).remove();
$(“#contactWrapper”).append(“

”+result+”

”); $(“#加载”).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>";
}
$errors=null;
如果(($name==“name”)){
$errors=$namererror;//未输入名称
}
如果($email==“电子邮件地址”)){
$errors.=$emailError;//未输入电子邮件地址
}
如果(!(预匹配($match,$email))){
$errors.=$invalidEmailError;//检查电子邮件的有效性
}
如果($spam!=“10”){
$errors.=$spamError;//垃圾邮件错误
}
如果(!($errors)){
邮件($to、$subject、$message、$headers);
//标题(“位置:thankyou.html”);
echo“您的邮件已成功发送!”;
//我希望页面重定向到thankyou.html,而不是重复此消息
}否则{
回显“

”; 回音$错误; 回声“

”; }
我想知道如果ajax请求成功并且没有错误,是否可以将用户重定向到感谢页面。这可能吗

谢谢!
Amit

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

window.location.href = "thankyou.php";
或者,由于正在显示结果,请等待几秒钟,例如,这将等待2秒钟:

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

我认为你可以通过以下方式做到这一点:

window.location = "your_url";

我想你可以从两个方面来解决这个问题

1) 插入
window.location=http://www.yourdomain.com
进入成功功能


2) 使用进一步的ajax调用将其注入到页面上的元素中,您可以在jQuery文档中找到进一步的信息,当然可以。只需在成功功能的末尾添加以下内容:

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

当不存在错误时,服务器返回响应
无错误

只需执行一些错误检查,如果一切都通过了,则设置
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'
        }

    }
});
$.ajax({
url:'mail3.php',
键入:“POST”,
数据:'contactName='+name+'&contactEmail='+email+'&spam='+spam,
成功:功能(结果){
//控制台日志(结果);
$(“#结果,#错误”).remove();
$(“#contactWrapper”).append(“

”+result+”

”); $(“#加载”).fadeOut(500,function(){ $(this.remove(); }); 如果(/*无错误*/){ window.location='thank-you.html' } } });
在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所述。

//在重定向之前创建延迟时间
// 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>";
}
setTimeout(函数(){ window.location.href=“thankyou.php”; }, 2000); $errors=null; 如果(($name==“name”)){ $errors=$namererror;//未输入名称 } 如果($email==“电子邮件地址”)){ $errors.=$emailError;//未输入电子邮件地址 } 如果(!(预匹配($match,$email))){ $errors.=$invalidEmailError;//检查电子邮件的有效性 } 如果($spam!=“10”){ $errors.=$spamError;//垃圾邮件错误 } 如果(!($errors)){ 邮件($to、$subject、$message、$headers); echo“您的邮件已成功发送!”; //我希望页面重定向到thankyou.html,而不是重复此消息 //重定向 setTimeout(); }否则{ 回显“

”; 回音$错误; 回声“

”; }
我在另一个线程上发布了确切的情况。重新张贴

对不起,这不是对上面问题的回答

但是带来了一个有趣的话题——什么时候使用AJAX,什么时候不使用AJAX。在这种情况下,最好不要使用AJAX

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

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

就我的2美分。:)

$.ajax({
url:'mail3.php',
键入:“POST”,
数据:'contactName='+name+'&contactEmail='+email+'&spam='+spam,
成功:功能(结果){
//控制台日志(结果);
$(“#结果,#错误”).remove();
$(“#contactWrapper”).append(“

”+result+”

”); $(“#加载”).fadeOut(500,function(){ $(this.remove(); }); 如果(结果==“无错误”)location.href=”http://www.example.com/ThankYou.html" } });
另一个选项是:

window.location.replace("your_url")

正确使用HTTP状态码将使每一次成功都获得成功,而服务器不必传回任何消息。@Jeremy-True,除非您想传回站点要处理的特定错误消息,或者甚至是失败时要重定向到的不同URL。这些消息必须返回200个响应代码,这就需要一个无错误响应来区分。实际上,从第一眼看,我觉得这个方法是可行的!是否可以获取mail3.php文件返回的$error变量(请参见编辑)并检查其内容。如果!($error),
window.location.replace("your_url")