首页 文章

Wordpress Ajax JSON成功返回无法识别

提问于
浏览
0

我在'm working on a contact form for a website using an jQuery Ajax call method that then uses Wordpress'中构建 admin-ajax.php 以提交表单's values, send them to an email address via wp_mail and then, if successful, send back an array through json_encode. The form works and the email sends but the success data isn' t后发送和Ajax:成功函数没有't initiate. Here' s我一直在使用的 .

jQuery

(document).ready(function($){

$.validator.addMethod("lettersonly", function(value, element) {
return this.optional(element) || /^[a-z\s]+$/i.test(value);
}, "Only alphabetical characters"); 

$.validator.addMethod("phoneNum", function(value, element) {
    return this.optional(element) || /^[0-9\-\s]+$/i.test(value);
}, "Phone number can only be number and dashes.");


$("#contact-form").validate({
    rules: {
        name: {
            required:true,
           lettersonly: true
        },
        email: {
            required: true,
            email: true
            },
        phone: {
            phoneNum: true,
            },
        message:  {
            required:true
        }
        },
     messages: {
            name:  {
                required: "Please enter your name.",
                lettersonly: "Needs to be letters, no numbers please."
            },
            email: {
                required: "Please enter your email adress.",
                email: "Please enter your valid email adress."
            },
            phone: {

            },
            message:{
                required: "Please enter a message.",
            }
          },

    submitHandler: function(form) {
    $('#contact-msg').html('<p class="ajaxLoader">Sending Email...</p>');

       $.ajax ({
            type: 'POST',
            url:  ajax_object.ajax_url,
            data: $('#contact-form').serialize(),
            dataType: 'json',
            success: function(response) {
                        if (response.status == 'success') {
                            $('#contact-form')[0].reset();
                        }
                        $('#contact-msg').html(response.errmessage);
                    }
                });

    }

});
});

Function.php

// CONTACT FORM SCRIPTS    
function contactform_add_script() {

wp_enqueue_script( 'contactform-script', get_template_directory_uri().'/assets/js/contact_me.js', array('jquery') , null, true);
wp_localize_script( 'contactform-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );

}
add_action('wp_enqueue_scripts', 'contactform_add_script');


// CONTACT FORM PROCESSING 
 function ajax_contactform_action_callback() {
$error = '';
$status = 'error';
if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['message'])) {
    $error = 'All fields are required to enter.';

    } else {
        $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
        $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
        $number = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);
       // $treatments = filter_var($_POST['treatments'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
        $subject = 'A message from St. Romain Interiors\'s contact form.';
        $message .= PHP_EOL.'Sender\'s name: '.$name;
        $message .= PHP_EOL.'Phone number: '.$number;
        $message .= PHP_EOL.'E-mail address: '.$email;

        $message .= PHP_EOL.'Message: '.stripslashes($_POST['message']);

        $sendmsg = "Thanks for the message! We will respond as soon as possible.";
        $to = 'blah@gmail.com'; // If you like change this email address
        // replace "noreply@yourdomain.com" with your real email address

        $header .= 'Reply-To: '.$email.PHP_EOL;
        if ( wp_mail($to, $subject, $message, $header) ) {
            $status = 'success';
            $error = $sendmsg;
        } else {
            $error = 'Some errors occurred.';
        }
    }

$resp = array('status' => $status, 'errmessage' => $error);
header( "Content-Type: application/json" );
echo json_encode($resp);
die();
}
add_action( 'wp_ajax_contactform_action', 'ajax_contactform_action_callback' );
add_action( 'wp_ajax_nopriv_contactform_action',      'ajax_contactform_action_callback' );

这已经在其他网站上工作,我不知道为什么它不在这个网站上工作 . 它发送电子邮件,只是我的jQuery方法没有成功回调 .

UPDATE

我下载了Firebug,这是我在提交表单时得到的回复 .


<b>Notice</b>: Undefined index: name in <b>/home/theski/public_html/stromain/wp-content/themes/stromain /functions.php</b> on line <b>156</b>

<b>Notice</b>: Undefined index: email in <b>/home/theski/public_html/stromain/wp-content/themes/stromain /functions.php</b> on line <b>157</b>

<b>Notice</b>: Undefined index: phone in <b>/home/theski/public_html/stromain/wp-content/themes/stromain /functions.php</b> on line <b>158</b>

<b>Notice</b>: Undefined variable: message in<b>/home/theski/public_html/stromain/wp-content/themes /stromain/functions.php</b> on line <b>161</b>

<b>Notice</b>: Undefined index: message in <b>/home/theski/public_html/stromain/wp-content/themes/stromain /functions.php</b> on line <b>165</b>

<b>Notice</b>: Undefined variable: header in <b>/home/theski/public_html/stromain/wp-content/themes /stromain/functions.php</b> on line <b>171</b>
{"status":"success","errmessage":"Thanks for the message! We will respond as soon as possible."}

1 回答

  • 0

    The answer was that debug was set to 'true' in wp_config . 这创建了由Wordpress返回的错误html,因为functions.php中的变量是通过ajax分配的,但Wordpress调试将它们报告为'Undefined' . 通过在表单上提交内容时查看Firebug中控制台选项卡上的返回信息,我发现了这一点 . 回报充满了
    和未定义的错误 . 这导致AJAX响应中断,不允许我激活ajax回调 . 将wp_config debug设置为'false'修复了所有问题 .

    至少这是我错误的 .

相关问题