WordPress Ajax JSON Erfolg Rückgabe wird nicht erkannt

Ich arbeite an einem Kontaktformular für eine Website mit einer jQuery Ajax Call-Methode, die dann WordPress-Gebäude in admin-ajax.php verwendet, um die Werte des Formulars zu senden, senden Sie sie an eine E-Mail-Adresse über wp_mail und dann, wenn erfolgreich, zurücksenden ein Array über json_encode. Das Formular funktioniert und die E-Mail sendet, aber die Erfolgsdaten werden nicht gesendet und die Ajax: Erfolgsfunktion wird nicht initiiert.

Dies hat auf anderen Websites funktioniert und ich bin mir nicht sicher, warum es auf dieser Website nicht funktioniert. Es sendet die E-Mail, nur meine jQuery-Methode erhält keinen Erfolgsrückruf.

Hier ist, was ich benutzt habe.

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

AKTUALISIEREN!

Wenn ich den submitHandler durch diesen ersetze, wird der Satz zurückgegeben, aber jetzt wird die E-Mail nie gesendet …

  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!

'); } }); }

UPDATE # 2

Ich ersetzte die Erfolgsfunktion durch das Original vom ersten Post, behielt aber die Datenwerte, die Sie vorgeschlagen hatten, und es macht das gleiche alte Ding, sendet die E-Mail aber sendet keinen Erfolgsrückruf. Auf Mozilla Firebug konnte ich diese Information im Response Headers Panel finden.

 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 

UPDATE # 3

Hier ist die Antwort, die ich in Firebug sehe

 
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 Erfolg Rückgabe wird nicht erkannt"

Sie geben Ihrem AJAX-Anruf nicht den Aktionsnamen. In WordPress müssen Sie einen Aktionsnamen angeben, den Sie nach dem Namen wp_ajax_ und wp_ajax_nopriv_ angeben.

In diesem Fall sollte der AJAX-Anruf funktionieren, wenn Sie die Daten ändern: innerhalb Ihres AJAX-Anrufs hierfür:

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

$_POST["values"]; dann die Werte des Formulars mit $_POST["values"]; in deiner PHP-function.

Die Antwort war, dass debug in wp_config auf ‘true’ gesetzt wurde . Dies führte dazu, dass der Fehler html von WordPress zurückgegeben wurde, da Variablen in der functions.php über AJAX zugewiesen wurden, WordPress debug jedoch als ‘Undefined’ gemeldet wurde. Ich habe das herausgefunden, indem ich die Rückgabeinformationen auf der Konsolenregisterkarte in Firebug beim Absenden von Inhalten auf dem Formular angezeigt habe. Die Rückkehr wurde mit gefüllt
und nicht definierte Fehler. Dies führte dazu, dass die AJAX-Antwort abbrach und ich den Ajax-callback nicht aktivieren konnte. Das Setzen von wp_config debug auf ‘false’ hat alles repariert.

Zumindest nehme ich an, bitte korrigiere mich, wenn ich falsch liege.