Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I'm wondering what the preferred method is for dealing with AJAX calls. Should one use the same plugin php file to process the POST or a separate one? Which is cleaner or safer?

share|improve this question

1 Answer 1

up vote 36 down vote accepted

the "safer and cleaner" way would be to use admin-ajax.php that comes with wordpress and wp_ajax hook to call you processing function from your plugin file and use wp-nonce to check the integrity of the call.

for example:

your ajax JQuery call would be

<script type="text/javascript" >
jQuery(document).ready(function($) {

    var data = {
        action: 'ACTION_NAME',
            Whatever: '1234',
            _ajax_nonce: '<?php echo wp_create_nonce( 'my_ajax_nonce' ); ?>'

    };

    // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
    // If you need it on a public facing page, uncomment the following line:
    // var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    jQuery.post(ajaxurl, data, function(response) {
        alert('Got this from the server: ' + response);
    });
});
</script>

the in your plugin file add

//if you want only logged in users to access this function use this hook
add_action('wp_ajax_ACTION_NAME', 'my_AJAX_processing_function');

//if you want none logged in users to access this function use this hook
add_action('wp_ajax_nopriv_ACTION_NAME', 'my_AJAX_processing_function');

*if you want logged in users and guests to access your function by ajax the add both hooks. *ACTION_NAME must match the action value in your ajax POST.

then in your function just make sure the request came from valid source

function my_AJAX_processing_function(){
   check_ajax_referer('my_ajax_nonce');
   //do stuff here
}

Hope this Helps

share|improve this answer
    
Thank you, this was exactly what I needed. –  James Feb 13 '11 at 2:48
    
Glad i could help –  Bainternet Feb 13 '11 at 10:00
    
Great post! Fixed my problem aswell :) –  Kalle H. Väravas Dec 21 '11 at 10:52
    
Thanks for this, I was looking for this exact thing. Your addition of the nonce is great as well. –  David Mar 25 '12 at 8:35

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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