it-swarm.com.de

AJAX Funktion, die -1 zurückgibt

Ich habe kürzlich ein kleines Plugin für meine Site entwickelt, das AJAX verwendet, und jetzt versuche ich, die gleichen AJAX Techniken für die Vorlagen derselben Site zu implementieren, aber als Ergebnis erhalte ich immer wieder -1. Hier ist mein Code ,

functions.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?

4
Odyss3us

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, d. H. "Wp_ajax_my_action" würde "my_action" heißen.

Sie verwechseln es mit der Callback-Methode. Hoffe das macht Sinn.

p.s. So korrigieren Sie Ihre Codeänderung:

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

Ich sehe zwei Probleme:

noConflict

Für WordPress sind noConflict-Wrapper für jQuery erforderlich. Also das:

$(document).ready(function(){

... muss das sein:

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

... damit $ innerhalb der Funktion richtig funktioniert.

Umfassender Ersatz des im Kernpaket enthaltenen Skripts

Außerdem ersetzen Sie nackt die im Kern gebündelte jQuery, die Sie niemals ausführen sollten , oder Sie riskieren, die Dinge im WP-Admin-Backend zu beschädigen.

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' );
}
2
Chip Bennett