This is a basic example of how to use AJAX in WordPress in the admin area. It shows how to take a variable from javascript, pass it to a PHP function (altering it slightly), and then pass it back to the javascript.
This assumes you already know how to enqueue javascript, etc.
Javascript Piece
[gist id=”69a305053e35a10584f94d6011bba2d6″ file=”simple-ajax-example.js”]
PHP Piece
[gist id=”69a305053e35a10584f94d6011bba2d6″ file=”simple-ajax-example.php” lines=”1-27″]
Using with a Theme
There’s two differences when using this with a theme or frontend.
PHP Update
In the PHP piece, you need to add also add this line:
[gist id=”69a305053e35a10584f94d6011bba2d6″ file=”simple-ajax-example.php” lines=”28-30″]
This allows visitors that aren’t logged in to run the ajax request.
Javascript Update
In the javascript piece on the frontend, you’ll likely see this error in the console:
wordpress ajaxurl is not defined
This is because WordPress does not define ajaxurl as a global variable on the frontend. Instead, we’ll need to define it ourselves. An easy way to do this if we’re already enqueuing our script is to use wp_localize_script to output the URL:
[gist id=”69a305053e35a10584f94d6011bba2d6″ file=”example-ajax-enqueue.php”]
If you view the source on the frontend, you should now see a global variable defined on the frontend called “example_ajax_obj”. To get the original javascript working on the frontend, update the ajaxurl variable to use this new variable:
url: example_ajax_obj.ajaxurl
I am a software engineer,
I appreciate your work done and such a social nature to help others.
Thanks
Hi Devin,
Simple and effective, i have seen others ajax tutorials with wordpress (complex ones), but until now, i do really understand how it works, the only question i still have is this:
In this hook:
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );
the hook name must start with “wp_ajax_xxxxxxx” because wp define it to be in that way, right?
Correct.
Not working, it says:
ReferenceError: ajaxurl is not defined
Since WP 2.8 version, ajaxurl works only for administration dashboard purpose.
try to use
wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
Hi,
This doesn’t seem to work for me. I added the
wp_localize_script
bit to my functions.php but still get theajaxurl is not defined
error. I’m using your tutorial on a wp frontend page.Thanks
Paul, use ajax_object.ajaxurl, because “ajax_object” is the name that WordPress will give the javascript object which will contain all the supplied variables.
@Jos Faber – Can you explain what you mean a little more? I’m having what seems like a similar issue.
Hi, is this example still up to date for 2014? Thanks
Yes.
How can i call another php file without passing an variable ?
Instead of function. Can i run another .php file?
No, you’ll need to call a function.
Is it possible to use the PHP function for logged-out users only? i.e. Can I omit the following?
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );
I believe so. But that means the action wouldn’t work for you if you were logged into the site and testing it.
Thanks for your reply.
That’ll be fine. My use case is a registration form so the end user will never be logged-in at the point at which this fires.
Hi, I’m working on “Load More” button and I’m using $.get. Is it safe to use normal http://example.com/page/2 link because I’m only getting data.
That works if you’re purely pulling from the front end. I’d also look at the “Load More” code in JetPack if you’re looking to pull entire posts (and want scripts, shortcodes, etc execute correctly).
Thank you, it works perfectly :)
Hi, great tutorial, simple and to the point. I see that the jquery code logs the data echoed by the php function. Is there anyway to use the variables defined in the php function inside the jquery success output?
Thanks
hey dude,
Thanks. This helped me a lot. Was building a plugin and got response 0 all the time.
I forgot to require_once() the actual php file that was used for processing.
Devin, great simple tutorial but I would try to update the tutorial with using a nonce or either tell beginner AJAX developers that using nonce should be done for security reasons.
Again Nice Simple Tutorial for Beginners.
DL
Hi if i want to print the $fruit value in php i am using print_r($fruit); but its not printing.can you please provide a solution on that.
I solved the “ajaxurl is not defined” issue in this way:
(1) Added this to my php:
echo(‘\n’);
(2) Added this to the top of my javascript:
var ajaxurl = $(“input#ajaxurl”).val();
Worked like a charm after that. Thanks Devin!
Sorry, the comment removed my code… I’ll try again. The bit I added in step 1 is:
<input type="hidden" id="ajaxurl" value="” />
Well, that didn’t work either… tried to help…
Yeah, sorry, code gets stripped out of comments. You can post a it in pastebin to share. But I would suggest the wp_localize_script method over something like that.
Hello, I’m having a very strange issue.
The AJAX is only working on one page. It won’t work with any other pages on the site. In the console, it says “Can’t find variable: ajaxurl”. I’m loading the JS globally as well. I could see that happened if I loaded it conditionally such as is_page() or something like that but its global. Am I missing something simple?
Its giving me a “ReferenceError: Can’t find variable: ajaxurl”
finnaly i understood how ajax in wp should work (after a whole day of searches) but is not working for me because the ajaxurl is not defined.
tried the:
wp_localize_script( ‘ajax-script’, ‘ajax_object’, array( ‘ajax_url’ => admin_url( ‘admin-ajax.php’ ) ) );
also:
wp_localize_script( ‘ajax-script’, ‘ajax_object.ajaxurl’, array( ‘ajax_url’ => admin_url( ‘admin-ajax.php’ ) ) );
but still it can’t recognize the ajaxurl…
i’m new to wp so i would be glad if u can update the post with how to register the ajaxurl variable.
also i can see that im not the only one having this question.
thanks
@Cezar @Garret
Make sure in your js you are calling the function name of your script
Example if the following
wp_localize_script( ‘ajax-script’, ‘ajax_object’, array( ‘ajaxurl’ => admin_url(‘admin-ajax.php’ ) ) );
Then your js url would be ajax_object.ajaxurl
php piece is included in funtions.php, and where javascript piece should be included?
For ajaxurl error just try changing to ‘ ‘
simple and Perfect just thanks.
+1 Simple and Perfect just thanks!
I don’t understand – where do I have to put my PHP piece?
In your theme’s functions.php file. If you are using child theme then in it’s function file.
this example is awesome thanks for it
I have spent a full day on this. All I get returning to the script is the html of the page itself. It does’t make any sense. I don’t know if using the Genesis framework is causing issues.
change ajaxurl to ajax_url if you are having a problem with “ReferenceError: Can’t find variable: ajaxurl”
Thank you very much but i tried the example on my wordpress website and i still getting nothing, only empty response, it seems the function isn’t executing, how can i call the url to activate the ajax function inside php page? can you give me an example?
I readed the other comments but nothing to do
Thank you in advance.
Hi Leonardo. I can see how this tutorial may have been confusing if you were trying to use it on the frontend. I’ve updated the post with additional snippets that explain in more detail how to use it with a theme.
Is there a typo :
the frontend called “example_ajax_onj”
Thanks, fixed.
Thanks for this simple example. Does this still work in April 2018? Also what folder should the php file go into?
Should still work in 2018. If this is going in a theme, you could put it in functions.php, or any file include from functions.php.
I have a question: I want to use an external custom.php file (located inside my child theme) for receiving the ajax request and processing and not using a simple function insite WP’s functions.php file. Is that possible?