WordPress Ajax JSON sucesso não é reconhecido

Estou trabalhando em um formulário de contato para um site usando um método de chamada JQuery Ajax que, em seguida, usa o edifício do WordPress em admin-ajax.php para enviar os valores do formulário, envie-os para um endereço de e-mail via wp_mail e, em caso de êxito, envie de volta uma matriz através do json_encode. O formulário funciona e o e-mail envia, mas os dados de sucesso não são enviados depois e a function Ajax: sucesso não é iniciada.

Isso funcionou em outros sites e não tenho certeza por que não está funcionando neste site. Ele envia o e-mail, apenas meu método jQuery não recebe retorno de retorno de sucesso.

Aqui está o que eu tenho usado.

jQuery

(document).ready(function($){ $.validator.addMethod("lettersonly", function(value, element) { return this.optional(element) || /^[az\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('

Sending Email...

'); $.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' ); 

ATUALIZAR!

Se eu replace o submitHandler com isso, ele retorna a frase, mas agora o e-mail nunca foi enviado …

  submitHandler: function(form) { $('#contact-msg').html('

Sending Email...

'); $.ajax ({ type: 'POST', url: ajax_object.ajax_url, data: { action: "contactform_action", values: $('#contact-form').serialize() }, dataType: 'json', success: function(response) { $('#contact-msg').html('

Thanks for the message!

'); } }); }

ACTUALIZAR # 2

Eu substituí a function de sucesso com o original da primeira publicação, mas manteve os valores de dados que você sugeriu e está fazendo o mesmo antigo, enviando o e-mail, mas não enviando retorno de retorno. No Mozilla Firebug, consegui encontrar esta informação no painel de headers de resposta.

 X-Robots-Tag: noindex X-Powered-By: PHP/5.6.14 x-frame-options: SAMEORIGIN x-content-type-options: nosniff Transfer-Encoding: chunked Server: Apache Pragma: no-cache Expires: Wed, 11 Jan 1984 05:00:00 GMT Date: Mon, 26 Oct 2015 06:13:54 GMT Content-Type: application/json Cache-Control: no-cache, must-revalidate, max-age=0 

ACTUALIZAR # 3

Aqui está a resposta que eu vejo no Firebug

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

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

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

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

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

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

Solutions Collecting From Web of "WordPress Ajax JSON sucesso não é reconhecido"

Você não está dando o nome da ação à sua chamada AJAX. No WordPress, você tem que dar um nome de ação, o mesmo nome que você dá o que quer que seja depois wp_ajax_ e wp_ajax_nopriv_

Nesse caso, a chamada AJAX deve funcionar se você alterar os dados: dentro da sua chamada AJAX, para isso:

 data: {action: "contactform_action", values: $('#contact-form').serialize()} 

Em seguida, recupere os valores do formulário com $_POST["values"]; na sua function php.

A resposta foi que a debugging foi definida como “verdadeira” no wp_config . Isso criou o html de erro para ser retornado pelo WordPress porque as variables ​​nas functions.php estavam sendo atribuídas via ajax, mas o WordPress debug foi relatado como ‘Undefined’. Encontrei isso com a visualização das informações de retorno na guia do console no Firebug ao enviar o conteúdo no formulário. O retorno foi preenchido com
e erros indefinidos. Isso causou a quebra da resposta AJAX, não permitindo que eu ativasse o retorno de chamada ajax. Configurando wp_config debug para ‘false’ corrigiu tudo.

Pelo menos, isso é o que eu suponho, corrija-me se eu estiver errado.