add_action(‘wp_ajax_[action name]’, myfunction) problem

I’m trying to integrate ajax in wordpress using the wp codex guidelines.
In the PHP I added:

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

The ajax code is:

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

and the PHP function that should be called by ajax is:

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

The ajax call is successful (the “alert” works), however, the php function “ajax_function” is never called.
After doing some debugging I realized that even though the action call add_action(‘wp_ajax_ sets a new element in the global $wp_filter array, when the corresponding do_action runs inside admin-ajax.php, the $wp_filter array no longer contains that element.

Therefore, “ajax_function” function is ignored.
Any idea why the function is not called?

Related posts

Leave a Reply

2 comments

  1. In my projects I do it like that

    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);
    });
    
  2. Please follow the 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
    }
    

    and in your ajax call do this:

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

    in the ajax call you’ll call your function without prefix_ajax_. Only call by it’s remaining. In that case it’s add_myfunc. In the response it will send done if everything goes right. Else response will be 0 or -1.

    Hope it will help. Thank you.