简体   繁体   English

无法使用Ajax从php文件接收响应

[英]Not receiving response from php file using ajax

Currently i am trying to send email using PHPMailer after submitting registration form but i am successfully receiving the email but not getting redirected or getting any message notice box after email has been sent. 目前,我正在尝试提交注册表格后使用PHPMailer发送电子邮件,但我已成功接收电子邮件,但在发送电子邮件后未得到重定向或收到任何消息通知框。

The Signup form 注册表格

  <form id="form_register" method="post" class="form-horizontal"> <span id="log"></span> <div class="form-group mb5"> <label for="username" class="col-xs-12 mb0">Username</label> <div class="col-xs-12"> <input type="text" class="form-control" placeholder="Username" name="username" id="username"> </div> </div> <div class="form-group mb5"> <label for="login-password" class="col-xs-12 mb0">First Name</label> <div class="col-xs-12"> <input type="text" class="form-control" placeholder="First Name" name="first_name" id="first_name"> </div> </div> <div class="form-group mb5"> <label for="login-password" class="col-xs-12 mb0">Last Name</label> <div class="col-xs-12"> <input type="text" class="form-control" placeholder="Last Name" name="last_name" id="last_name"> </div> </div> <div class="form-group mb5"> <label for="login-password" class="col-xs-12 mb0">Email</label> <div class="col-xs-12"> <input type="email" class="form-control" placeholder="Email address" name="email" id="email"> </div> </div> <div class="form-group mb5"> <label for="login-password" class="col-xs-12 mb0">Password</label> <div class="col-xs-12"> <input type="password" class="form-control" placeholder="Password" name="password" id="password"> </div> </div> <div class="form-group mb5"> <label for="login-password" class="col-xs-12 mb0">Confirm Password</label> <div class="col-xs-12"> <input type="password" class="form-control" placeholder="Confirm Password" name="confirm_pass" id="confirm_pass"> </div> </div> <div class="form-group"> <label class="col-md-3 control-label text-left" for="gender">Gender</label> <div class="col-md-9"> <select id="gender" name="gender" class="form-control" size="1"> <option value="male">Male</option> <option value="female">Female</option> <option value="other">Other</option> </select> </div> </div> <div class="form-group"> <div class="col-xs-7"> </div> <div class="col-xs-5 text-right"> <button type="submit" class="btn btn-effect-ripple btn-sm btn-warning btn-block" name="create_account" id="create_account"><i class="fa fa-user-plus"></i> Sign up</button> </div> </div> </form> 

Here is the ajax work: 这是ajax的工作:

  function regform() { var data = $("#form_register").serialize(); $.ajax({ type : 'POST', url : 'core/register.class.php', data : data, beforeSend: function() { $("#log").fadeOut(); $("#create_account").html('<i class="fa fa-spinner fa-spin"></i>'); }, success : function(response){ if(response=="emptycaptcha"){ $("#log").fadeIn(); $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Empty Captcha</strong> Please fill in the captcha to continue.</div>'); $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up'); }else if(response=="wrongcaptcha"){ $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Wrong Captcha</strong> Please fill in the captcha correctly.</div>'); $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up'); }else if((response=="noact") || (response=="adminact")){ $("#log").fadeIn(); $("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> You will be redirected to Login Page...</div>'); $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up'); setTimeout(function() { window.location.href = "login.php"; }, 5000); }else if(response=="emailact"){ $("#log").fadeIn(); $("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> A Verification Email has been sent to your email.You will be redirected to verification page...</div>'); $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up'); var uemail = $('#email').val(); setTimeout(function() { window.location.href = "verification.php?verify="+uemail; }, 5000); } }, error: function(response){ $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Error !</strong> Something went wrong.</div>'); } }); return false; } 

Here is the PHP part which receives my form inputs and send code and email to the email php file 这是PHP部分,它接收我的表单输入并将代码和电子邮件发送到电子邮件php文件

    if (isset($_POST['create_account'])){   
            $username = trim($_POST['username']);
             $first_name = trim($_POST['first_name']);
             $last_name = trim($_POST['last_name']);
             $email = trim($_POST['email']);
             $pass = trim($_POST['password']);
             $password = PASSWORD_HASH($pass, PASSWORD_BCRYPT);
             $gender = $_POST['gender'];
             $code = mt_rand(1111111, 9999999); 
             $reg_date = date('Y-m-d');
            try{
                $rai = $db_con->prepare("ALTER TABLE users AUTO_INCREMENT = 1");
                $rai->execute();                        
                if($settings['account_act']=='noact'){
                    $v_status = 'true';
                    $a_status = 'true';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    echo 'noact';
                }else if($settings['account_act']=='emailact'){
                    $v_status = 'false';
                    $a_status = 'false';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    send_code($code,$email);
                    echo 'emailact';    
                    }
                }else if($settings['account_act']=='adminact'){
                    $v_status = 'false';
                    $a_status = 'false';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    echo 'adminact';
                }
            }
            catch(PDOException $e){
                echo "sorry".$e->getMessage();
            }
}

The email.class.php email.class.php

function send_code($code,$email){
//Load composer's autoloader
require 'PHPMailer/vendor/autoload.php';

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
    //Server settings
    $mail->SMTPDebug = 2;                                 // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'xxxxx';                 // SMTP username
    $mail->Password = 'xxxxx';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('xxxxxxxxx', 'xxxx');
    $mail->addAddress($email, 'User');     // Add a recipient
    //$mail->addAddress('ellen@example.com');               // Name is optional
    //$mail->addReplyTo('info@example.com', 'Information');
    //$mail->addCC('cc@example.com');
    //$mail->addBCC('bcc@example.com');

    //Attachments
    //$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
    //$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>'.$code;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );
    $mail->send();  
    //echo 'Message has been sent';
    header('location:../verification.php?verify='.$email);
    //echo 'emailact';
} catch (Exception $e) {
    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}

} }

Now if i remove the send_code($code,$email) from the register.class.php then i am successfully receiving the redirection and notice.I have tried almost 3 hours but not getting to any point. 现在如果我从register.class.php中删除send_code($ code,$ email),那么我就成功地收到了重定向和notice.I尝试了将近3个小时,但没有任何进展。

UPDATE1: i have enabled error_reporting and display_error but i am not receiving any errors in the phperror log and also no error in the console of chrome . UPDATE1:我已启用error_reporting和display_error,但是我没有在phperror日志中收到任何错误,也没有在chrome控制台中收到任何错误。 I have tried using console.log(response) and i am receiving the email in my gmail properly and also i am receiving the response 'emailact' properly but why am i not getting redirected? 我尝试使用console.log(response),我在gmail中正确接收了电子邮件,并且我也正确接收了“ emailact”响应,但是为什么我没有重定向? the log is as follow : 日志如下:

2018-07-21 14:53:03 CLIENT -> SERVER: This is the HTML message body <b>in bold!</b>9759376 2018-07-21 14:53:03客户端->服务器:这是HTML消息正文<b>粗体!</ b> 9759376
2018-07-21 14:53:03 CLIENT -> SERVER: 2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03 CLIENT -> SERVER: 2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03 CLIENT -> SERVER: --b1_vph8ZrSzb5duNdneV6Z64s04gZP7o2um2oEAjFQXso-- 2018-07-21 14:53:03客户端->服务器:--b1_vph8ZrSzb5duNdneV6Z64s04gZP7o2um2oEAjFQXso--
2018-07-21 14:53:03 CLIENT -> SERVER: 2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03 CLIENT -> SERVER: . 2018-07-21 14:53:03客户端->服务器:。
2018-07-21 14:53:04 SERVER -> CLIENT: 250 2.0.0 OK 1532184784 v4-v6sm5199360wra.22 - gsmtp 2018-07-21 14:53:04服务器->客户端:250 2.0.0 OK 1532184784 v4-v6sm5199360wra.22-gsmtp
2018-07-21 14:53:04 CLIENT -> SERVER: QUIT 2018-07-21 14:53:04客户端->服务器:退出
2018-07-21 14:53:04 SERVER -> CLIENT: 221 2.0.0 closing connection v4-v6sm5199360wra.22 - gsmtp 2018-07-21 14:53:04服务器->客户端:221 2.0.0关闭连接v4-v6sm5199360wra.22-gsmtp
emailact emailact

UPDATE 2:(SOLVED) At last i solved it its not the issue with the email.class.php but i think its with the response in my final log console.log(response) i was receiving the complete work load of php mailer well i think the whole log along with the 'emailact' that i was echoing ,was the 'response'.By considering this i arranged js in success function as follows: 更新2 :(已解决)最后我解决了它不是email.class.php的问题,但我认为它与最终日志console.log(response)中的响应有关,我很好地接收了php mailer的全部工作量我认为整个日志以及我正在回显的'emailact'都是'response'。考虑到这一点,我将js安排在成功函数中,如下所示:

 success : function(response){ console.log(response); if(response=="emptycaptcha"){ $("#log").fadeIn(); $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Empty Captcha</strong> Please fill in the captcha to continue.</div>'); $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up'); }else if(response=="wrongcaptcha"){ $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Wrong Captcha</strong> Please fill in the captcha correctly.</div>'); $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up'); }else if((response=="noact") || (response=="adminact")){ $("#log").fadeIn(); $("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> You will be redirected to Login Page...</div>'); $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up'); setTimeout(function() { window.location.href = "login.php"; }, 5000); }else{ //if(response == "emailact"){ $("#log").fadeIn(); $("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> A Verification Email has been sent to your email.You will be redirected to verification page...</div>'); $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up'); var uemail = $('#email').val(); setTimeout(function() { window.location.href= "verification.php?verify="+uemail; }, 5000); } } 

Your ajax is fine and it's sending data to the php file but, php cannot access the information because yo didn't define (I don't know what they call this) Let's say method name: 您的ajax很好,它正在将数据发送到php文件,但是php无法访问该信息,因为您未定义(我不知道他们怎么称呼它)。让我们说方法名称:

$.ajax({
            type : 'POST',
            url  : 'core/register.class.php',
            data : {'create_account': data}, //********this is too important!!!
            beforeSend: function()
            {   
                $("#log").fadeOut();
                $("#create_account").html('<i class="fa fa-spinner fa-spin"></i>');
            },

The second thing is in your core/register.class.php you didn't define the parameters correctly, This is the right way to get the serialized data: 第二件事是在您的core/register.class.php您没有正确定义参数,这是获取序列化数据的正确方法:

if (isset($_POST['create_account'])){   
            $get = explode('&', $_POST['create_account'] ); // explode with &

            foreach ( $get as $key => $value) {
                $valn[ substr( $value, 0 , strpos( $value, '=' ) ) ] =  substr( $value,                strpos( $value, '=' ) + 1 ) ;
            }

        // access your query param
        $username = trim($valn['username']);
        $first_name = trim($valn['first_name']);
        $last_name = trim($valn['last_name']);
        $email = trim($valn['email']);
        $pass = trim($valn['password']);
        $password = PASSWORD_HASH($pass, PASSWORD_BCRYPT);
        $gender = $valn['gender'];
        $code = mt_rand(1111111, 9999999); 
        $reg_date = date('Y-m-d');
            try{
                $rai = $db_con->prepare("ALTER TABLE users AUTO_INCREMENT = 1");
                $rai->execute();                        
                if($settings['account_act']=='noact'){
                    $v_status = 'true';
                    $a_status = 'true';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    echo 'noact';
                }else if($settings['account_act']=='emailact'){
                    $v_status = 'false';
                    $a_status = 'false';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    send_code($code,$email);
                    echo 'emailact';    
                    }
                }else if($settings['account_act']=='adminact'){
                    $v_status = 'false';
                    $a_status = 'false';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    echo 'adminact';
                }
            }
            catch(PDOException $e){
                echo "sorry".$e->getMessage();
            }
}

I think this will work fine for you. 我认为这对您来说很好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM