Warum funktioniert mein AJAX-Anruf nicht?

Ich habe ähnlichen Code, der innerhalb der functions.php Datei eines Themas arbeitet, aber ich möchte es zu einem plugin bewegen. Ich habe das Folgende zusammengestellt, aber aus irgendeinem Grund hat diese Methode Probleme beim AJAX-Aufruf und gibt immer Null zurück.

Die Absicht hierbei ist, dass das Formular auf dem Front-End und von eingeloggten oder nicht angemeldeten Benutzern verwendbar sein wird.

Hier ist mein Plugin-Code:

/* Plugin Name: AAA Hello World Plugin URI: http://helloworld.com Description: AJAX response to form submission Version: 1.0 Author: John Doe Author URI: http://helloworld.com */ class RespondToMyClicks { function __construct() { add_action( 'wp_enqueue_scripts', array( &$this, 'click_response_styles' ) ); add_action( 'wp_enqueue_scripts', array( &$this, 'click_response_scripts' ) ); if( is_admin() ) { add_action( 'wp_ajax_the_ajax_hook', array( &$this, 'process_clicky_form' ) ); add_action( 'wp_ajax_nopriv_the_ajax_hook', array( &$this, 'process_clicky_form' ) ); } add_shortcode( 'click_response_form', array( &$this, 'click_response_form' ) ); } public function click_response_styles() { wp_register_style( 'respond-to-my-clicks', plugins_url( dirname( plugin_basename( __FILE__ ) ) . '/styles.css' ) ); wp_enqueue_style( 'respond-to-my-clicks' ); } public function click_response_scripts() { wp_enqueue_script( 'respond-to-my-clicks', plugin_dir_url( __FILE__ ) . 'ajax.js', array( 'jquery' ) ); wp_localize_script( 'respond-to-my-clicks', 'the_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } public function process_clicky_form() { if( !empty( $_POST ) && wp_verify_nonce( $_POST['post_filtration'], 'post_filter_action' ) ) { echo "Hello World"; die(); } } public function click_response_form() { $the_form = '
' . wp_nonce_field( 'post_filter_action', 'post_filtration' ) . '
'; return $the_form; } } new RespondToMyClicks();

Und hier ist mein Javascript-Datei-Code:

  function submit_me() { jQuery("#response_area").fadeOut("slow"); jQuery.post(the_ajax_script.ajaxurl, jQuery("#theForm").serialize(), function(response_from_the_action_function){ jQuery("#response_area").html(response_from_the_action_function).fadeIn("fast"); } ) } 

Ich habe mir das schon zu lange angeschaut und verschiedene Codevarianten ausprobiert, also hoffentlich kann jemand das offensichtliche klarstellen, denn ich vermisse es einfach. Vielen Dank!

Solutions Collecting From Web of "Warum funktioniert mein AJAX-Anruf nicht?"

Okay, jetzt habe ich die gesamte Lösung. Es waren zwei Dinge:

  1. Caching war der erste Teil des Problems. Cache gelöscht, Plugin für deaktiviertes Caching vorerst deaktiviert.
  2. Das zweite, weniger offensichtliche Problem war, dass bei nicht angemeldeten Benutzern die Antwort des AJAX-Aufrufs das gesamte HTML-Dokument im Antwortbereich zurückgab. Es stellte sich heraus, dass ich eine “Umleitung” -function in meiner functions.php-Datei hatte, die dies verursachte. Es wurde entwickelt, um Benutzer unterhalb des Autors zurück zum Frontend zu leiten, so dass sie niemals auf das Backend zugreifen und admin-ajax.php technisch von der Admin-Seite aus funktioniert, so dass das Problem war.