admin-ajax.php返回0

时间:2018-07-21 14:49:52

标签: php jquery ajax wordpress

我目前正在处理WordPress联系人表单,该表单是作为插件创建的。提交后我需要表格来发送电子邮件而无需重新加载页面。重新加载后,一切正常。问题是按下提交按钮并激活e.preventDefault()时,浏览器显示 500(内部服务器错误),其中 admin-ajax.php = 0

PS帖子已编辑

     <?php
        add_action( 'admin_footer', 'html_form_code' ); // Write our JS below here
        //
        function html_form_code() {
        ?>
        <form action="<?php esc_url( $_SERVER['REQUEST_URI'] )?>" method="post" class="contact-form" id="contact-form" >
            <div class=header-contact>
                <p><h2>Contact Form</h2></p>
                <hr>
            </div>
            <div class=input-containers>
                <input type="text" id="name" name="cf-name" pattern="[a-zA-Z0-9 ]+" value="" size="40" placeholder="Име и фамилия"/>
            </div>
            <div class=input-containers>
                <input type="email" id="email" name="cf-email" value="" size="40" placeholder="Поща"/>
            </div>
            <div class=input-containers>
                <input type="text" id="subject" name="cf-subject" pattern="[a-zA-Z ]+" value="" size="40" placeholder="Относно"/>
            </div>
            <div class=input-containers>
                <textarea rows="10" id="message" cols="35" name="cf-message" placeholder="Текст"></textarea>
            </div>
            <div class=input-containers>
                <input type="submit" name="cf-submitted" value="Send" id="submitForm">
            </div>
            <p id="verify" style="display:none;">Your message has been sent.<br /><br /></p> 
        </form>
        <script>
    jQuery('#contact-form').submit(function(e){

         e.preventDefault();
         var name =  jQuery('#name').val();
         var email =  jQuery('#email').val();
         var subject =  jQuery('#subject').val();
         var message =  jQuery('#message').val();
                  jQuery.ajax({
                   url: '<?php echo admin_url('admin-ajax.php'); ?>',
                   type: "POST",
                   data:{ 
                      action: 'send_email', 
                      name: name,
                      email: email,
                      subject: subject,
                      message: message,
                        },
                   success:function(res){
            alert("Email Sent.");
            }
         }); 
        });
    </script>
        <?php
        }
        add_action( 'wp_ajax_send_email', 'deliver_mail' );
        add_action( 'wp_ajax_nopriv_send_email', 'deliver_mail' );

        function deliver_mail() {
            require_once "wp-includes/class-phpmailer.php";
            if (isset($_POST["cf-submitted"])) {

                // sanitize form values
                $name    = sanitize_text_field( $_POST["cf-name"] );
                $email   = sanitize_email( $_POST["cf-email"] );
                $subject = sanitize_text_field( $_POST["cf-subject"] );
                $message = esc_textarea( $_POST["cf-message"] );

                // get the blog administrator's email address

                //$to = "email@gmx.com";
                $headers = "From: $name <$email>" . "\r\n";

                // Localhost
                $mail = new PHPMailer(true);
                $mail->IsSMTP(); // telling the class to use SMTP
                $mail->CharSet = 'UTF-8';

                $mail->SMTPDebug = 0;                     // enables SMTP debug information (for testing)
                $mail->SMTPAuth = true;                  // enable SMTP authentication
                $mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
                $mail->Host = "mail.gmx.com";      // sets GMX as the SMTP server for example: mail.gmx.com
                $mail->Port = 465;                 // set the SMTP port for the GMX server


                $mail->Username = $email;
                $mail->Password = 'pass';

                $mail->SetFrom($email, $name);
                $mail->AddAddress($email);

                $mail->Subject = $subject;
                $mail->MsgHTML($message);

                $headers .= "Content-Type: text/html; charset=utf-8";
                $headers .= "Content-Transfer-Encoding: 8bit";

                try {
                    $mail->send();
                    $msg = "An email has been sent for verfication.";
                    $msgType = "success";

                    wp_safe_redirect( home_url(), 302 );
                    exit();

                } catch (Exception $ex) {
                    $msg = $ex->getMessage();
                    $msgType = "warning"; 

                    wp_safe_redirect( home_url(), 302 );
                    exit();
                }  

        add_action( 'init', function() {
            if ( ! empty( $_POST['form_submitted'] ) ) {
                deliver_mail();        
            }
        });

        function cf_shortcode() {
            ob_start();
            //deliver_mail();
            html_form_code();

            //ob_end_flush(); 
            return ob_get_clean();
        }
        add_shortcode( 'contact_form_second', 'cf_shortcode' );

1 个答案:

答案 0 :(得分:0)

您必须指定要发送的数据,请尝试以下操作:

 jQuery(document).ready(function($) {
    $('#contact-form').submit(function(e) {
        e.preventDefault();
        //e.stopPropagation();
   const email=$('#email').val()
const email=$('#email').val()
const name=$('#name').val()
const subject=$('#subject').val()
const message=$('#message').val()
const data={
   'name':name,
    'email':email,
    'subject':subject,
  ' message':message
 }

        $.ajax({
            type: 'post',
            url: '/',
            data:{...data},
            success: function () {
              //alert(formData);
              $('#verify').show();
             $('#verify').fadeIn().html("gff");
                setTimeout(function() {
                    $('#verify').fadeOut("slow");
                }, 5000 );
              $(".contact-form")[0].reset();
            },
        error: function() {
              alert('Error!');
            }
          });
    });
});