一尘不染

表单成功后,jQuery Ajax setTimeout无法重定向?

php

在提出问题之前,我尝试过出现一些问题,但没有机会使其发挥作用。当我将其添加到邮件发送成功警报时,它工作正常,但是我不想在php部分中添加脚本。

表单成功后,我试图将联系页面重定向到另一个页面,并延迟几秒钟。

这是我的Jquery ajax:

$(document).ready(function(){
    $('#ContactForm').submit(function(event){
    event.preventDefault();
    var formValues = $(this).serialize();
        $.ajax({
        url:"modules/contact.inc.php",
        method:"POST",
        data:formValues,
        dataType:"JSON",
            success:function(data){
                if(data.error === 'ok'){
                    $('#result').html(data.error);
                    setTimeout(function() {
                        window.location = 'index.php';
                    }, 1000);
                } else {
                    $('#result').html(data.error);
                    $('#ContactForm')[0].reset();
                }
            }
        });
    });
});

我尝试了以下setTimeout();成功功能,但没有成功:

setTimeout(function() {
  window.location.replace("index.php");
},1000);

然后我尝试了:window.location.replace("index.php");没有setTimeout函数也无法正常工作。

window.location.href
window.location.hostname
window.location

这个适用于另一页中的模式

setTimeout(function() {
window.location.reload();
}, 3000);

这些是我的尝试,没有机会,谢谢您的任何建议和帮助。

编辑:这是data.error包含的php部分:

$error     = "";

    // Validate user name
    if(empty($_POST["fname"])){
        $error .= "<p class='error'>İsim girmediniz.</p>";
    } else {
        $name = test_input($_POST["fname"]);
    }

    // Validate email address
    if(empty($_POST["email"])){
        $error .= "<p class='error'>E-Posta girmediniz.</p>";     
    } else{
        $email = $_POST["email"];
        if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $error .= "<p class='error'>E-Posta doğru formatta değil.</p>";
        }
    }

    // Validate user subject
    if(empty($_POST["subject"])){
        $error .= "<p class='error'>Konu girmediniz.</p>";
    } else {
        $subject = test_input($_POST["subject"]);
    }

        // Validate user message
    if(empty($_POST["message"])){
        $error .= "<p class='error'>Mesaj girmediniz.</p>";
    } else {
        $message = test_input($_POST["message"]);
    }

    // Validate user departman
    if(empty($_POST["departmant"])){
        $error .= "<p class='error'>departman Seçin.</p>";
    } else {
        $departman = test_input($_POST["departmant"]);
    }
    if($error === ''){
        require "../PHPMailer/mailer.php";
        $mail = new mailSend();
        $email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
        $name = test_input($_POST["fname"]);
        $subject = test_input($_POST["subject"]);
        $departman = test_input($_POST["departmant"]);
        $message = test_input($_POST["message"]);
        $error = $mail->sendMail($email,$name,$subject,$departman,$message); 
    }else{
        $error .= "<p class='error'>Formda bir hata oluştu.</p>";
    }
$data = array(
 'error'  => $error
);

echo json_encode($data);

编辑:工作了,谢谢您的回答,

显示导致问题的错误,$('#result').html(data.error);我将其更改为文本消息,而不是来自php的成功消息:

$('#result').html('Form successfuly');
 $('#ContactForm')[0].reset();
 setTimeout(function() {
   window.location = 'index.php';
 }, 1000);

它工作正常。


阅读 280

收藏
2020-05-26

共1个答案

一尘不染

String.replace()需要两个参数。如所写,它将查找字符串“
index.php”,并将其替换为任何内容。尝试添加正则表达式以匹配所有内容并替换为新的URL。

setTimeout(function() {
  window.location.replace( /.*/, "index.php");
},1000);

使用完整的网址(即https://yourdomain.com/index.php)或编写更好的正则表达式。例如,如果您的域名以 **.com**
结尾,则可以执行以下操作:

setTimeout(function() {
  window.location.replace( /\.com\/.*/, ".com/index.php");
},1000);
2020-05-26