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:

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?

  • @user1567: You add the function to the wp_ajax_myaction and wp_ajax_admin_myaction hooks. Should that not be wp_ajax_myaction (for logged in users) and wp_ajax_nopriv_myaction (for anonymous users)? – Jan Fabry Dec 1 '10 at 13:52
  • yes I fixed it, thanks. By the way, I have an update_option call inside the "ajax_function" that seem to fail because it is called after all wordpress loading sequence is complete? Is there another way to update_option? – user1567 Dec 1 '10 at 16:26

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

Maybe this guide will help you. http://www.wphardcore.com/2010/5-tips-for-using-ajax-in-wordpress/

  • 1
    Thanks for the answer. I know this guide, I went over it as well. I changed the function to be exactly like yours but no luck :-( The function is still not called. – user1567 Dec 1 '10 at 12:43
  • by the way, where do you set the value of ajaxurl variable? – user1567 Dec 1 '10 at 12:46
  • 1
    In my example I assumed that variable is already set. In WP Backend the variable is always set. In the frontend I just define it in the header. <script type="text/javascript"> var ajaxurl = <?php bloginfo('url') ?>'/wp-admin/admin-ajax.php'; </script> I bet there is a smarter way to handle it. – Horttcore Dec 1 '10 at 13:46
  • I see. anyway, the function still doesn't work for me. Does it matter that the ajax is for admin back end? or the same functions should be used? – user1567 Dec 1 '10 at 14:35
  • I finally fixed it. The problem was the loading order and the location of the add_action calls. I have another small question: you wrote data = { action: 'foo', avalue: 'some value', 'anothervalue': 'another value' }; What if I want to include an array as the value of one of the keys? – user1567 Dec 1 '10 at 15:23

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.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.