webentwicklung-frage-antwort-db.com.de

problem mit add_action ('wp_ajax_ [Aktionsname]', myfunction)

Ich versuche, Ajax in WordPress mit den WP-Codex-Richtlinien zu integrieren. Im PHP habe ich hinzugefügt:

wp_enqueue_script ( 'my_ajax', ADMIN_URL . 'js/ajax.js','jquery','1.0.0' );
wp_localize_script( 'my_ajax', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );

Der Ajax-Code lautet:

jQuery.ajax({url: MyAjax.ajaxurl, type: "POST",data: {action: 'myaction',postID : MyAjax.postID}, success: function(response) {
 alert('Got this from the server: ' + response);
}});

und die PHP -Funktion, die von Ajax aufgerufen werden sollte, ist:

function ajax_function() {
...do something...
}
add_action('wp_ajax_myaction', 'ajax_function');
add_action('wp_ajax_admin_myaction', 'ajax_function');

Der Ajax-Aufruf ist erfolgreich (der "alert" funktioniert), die PHP-Funktion "ajax_function" wird jedoch nie aufgerufen. Nach einigem Debuggen wurde mir klar, dass das Array $ wp_filter dieses Element nicht mehr enthält, obwohl der Aktionsaufruf add_action ('wp_ajax_ ein neues Element im globalen Array $ wp_filter festlegt.

Daher wird die Funktion "ajax_function" ignoriert. Irgendeine Idee, warum die Funktion nicht aufgerufen wird?

4
user1567

In meinen Projekten mache ich das so

PHP

function foo() {
    echo 'bar';
}
add_action('wp_ajax_foo', 'foo' ); // executed when logged in
add_action('wp_ajax_nopriv_foo', 'foo' ); // executed when logged out

Javascript

data = { action: 'foo', avalue: 'some value', 'anothervalue': 'another value' };
jQuery.post(ajaxurl, data, function(response){
    alert(response);
});
4
Horttcore

Bitte folgen Sie dem Code:

add_action( 'wp_ajax_add_myfunc', 'prefix_ajax_add_myfunc' );
add_action( 'wp_ajax_nopriv_add_myfunc', 'prefix_ajax_add_myfunc' );

function prefix_ajax_add_myfunc() {
    // Handle request then generate response using WP_Ajax_Response
}

und in deinem Ajax-Aufruf mache folgendes:

jQuery.post(
    ajaxurl, 
    {
        'action': 'add_myfunc',
        'data':   'foobarid'
    }, 
    function(response){
        alert('The server responded: ' + response);
    }
);

im Ajax-Aufruf rufen Sie Ihre Funktion ohne prefix_ajax_ auf. Rufen Sie nur an, es ist noch übrig. In diesem Fall ist es add_myfunc. In der Antwort wird done gesendet, wenn alles richtig läuft. Anderenfalls lautet die Antwort 0 oder -1.

Hoffe es wird helfen. Vielen Dank.

1
Sajidur Rahman