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

时间:2018-07-21 12:22:41

标签: javascript php jquery html ajax

当前,我试图在提交注册表格后使用PHPMailer发送电子邮件,但我成功接收了电子邮件,但在发送电子邮件后没有重定向或收到任何消息通知框。

注册表单

        <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>

这是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;
		}

这是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();
            }
}

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

}

现在,如果我从register.class.php中删除send_code($ code,$ email),那么我就成功地收到了重定向和通知。我已经尝试了将近3个小时,但没有任何进展。

UPDATE1: 我已经启用了error_reporting和display_error,但是我没有在phperror日志中收到任何错误,也没有在chrome控制台中收到任何错误。 我尝试使用console.log(response),我在gmail中正确接收了电子邮件,并且我也正确接收了“ emailact”响应,但是为什么我没有重定向?日志如下:

2018-07-21 14:53:03客户->服务器:这是HTML消息正文,以粗体显示! 9759376
2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03客户端->服务器:--b1_vph8ZrSzb5duNdneV6Z64s04gZP7o2um2oEAjFQXso--
2018-07-21 14:53:03客户端->服务器:
2018-07-21 14:53:03客户端->服务器:。
2018-07-21 14:53:04服务器->客户端:250 2.0.0 OK 1532184784 v4-v6sm5199360wra.22-gsmtp
2018-07-21 14:53:04客户端->服务器:退出
2018-07-21 14:53:04服务器->客户:221 2.0.0关闭连接v4-v6sm5199360wra.22-gsmtp
emailact

更新2 :(已解决) 最后,我解决了它与email.class.php无关的问题,但是我认为它与最终日志console.log(response)中的响应有关我很好地接收了php mailer的全部工作量,我认为整个日志考虑到这个,我将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);				
		}
}

1 个答案:

答案 0 :(得分:0)

您的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>');
            },

第二件事是在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();
            }
}

我认为这对您来说很好。