AJAX-function, die -1 zurückgibt

Ich habe vor kurzem ein kleines Plugin für meine Site entwickelt, das AJAX verwendet, und jetzt versuche ich, die gleichen AJAX-Techniken für die Vorlagen der gleichen Site zu implementieren, aber ich -1 als Ergebnis immer -1 , hier ist mein Code,

functionen.php:

  //Front end AJAX functions function eu_custom_query(){ global $post; global $wpdb; echo "yo"; die(); } function enque_template_scripts() { wp_deregister_script( 'jquery' ); wp_register_script( 'jquery', 'http://code.jquery.com/jquery-1.6.2.js'); wp_enqueue_script( 'jquery' ); // embed the javascript file that makes the AJAX request wp_register_script( 'scripts.js', get_bloginfo('template_directory').'/scripts/scripts.js'); wp_enqueue_script( 'scripts.js' ); // declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php) wp_localize_script( 'scripts.js', 'wp_ajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } add_action('wp_ajax_custom_query', 'eu_custom_query'); add_action('wp_ajax_nopriv_custom_query', 'eu_custom_query'); add_action('get_header', 'enque_template_scripts'); 

scripts.js:

 $(document).ready(function(){ $("#do_ajax").click(function(){ $.post(wp_ajax.ajaxurl, { action: 'eu_custom_query' }, function(data){ alert(data); }); }); }); 

Ich benutze WordPress Version 3.2.1

Irgendwelche Ideen, was ich falsch mache?

Solutions Collecting From Web of "AJAX-function, die -1 zurückgibt"

Sie übergeben ‘eu_custom_query’ als Aktion in Ihrem AJAX. Es sollte “custom_query” sein.

Sie bestimmen den Aktionsnamen, wenn Sie die Aktion hinzufügen, zB ‘wp_ajax_my_action’ würde ‘my_action’ heißen

Sie verwechseln es mit der Callback-Methode. Hoffnung, die Sinn macht.

ps, um deinen Code zu ändern:

 add_action('wp_ajax_custom_query', 'eu_custom_query'); add_action('wp_ajax_nopriv_custom_query', 'eu_custom_query'); 

zu:

 add_action('wp_ajax_eu_custom_query', 'eu_custom_query'); add_action('wp_ajax_nopriv_eu_custom_query', 'eu_custom_query'); 

Ich sehe zwei Probleme:

kein Konflikt

WordPress benötigt keine Conflict Wrapper für jQuery . Also das:

 $(document).ready(function(){ 

… muss das sein:

 jQuery(document).ready(function($) { 

… damit $ in der function richtig funktioniert.

Flächendeckender Ersatz des Core-gebündelten Skripts

Außerdem ersetzen Sie den Core-gebündelten jQuery, den Sie nie tun sollten , oder Sie riskieren, Dinge im WP-Admin-Backend zu brechen.

Ein solcher Code muss in eine if ( ! is_admin() ) Bedingung eingeschlossen werden:

 if ( ! is_admin() ) { wp_deregister_script( 'jquery' ); wp_register_script( 'jquery', 'http://code.jquery.com/jquery-1.6.2.js'); wp_enqueue_script( 'jquery' ); }