I am migrating a web app into my wordpress site. I would like to house the app on one wordpress page. When I initialize the content with an ajax call on page load, I receive what looks like the html string for the entire page.
<?php
function my_scripts_method() {
if (is_page('testpage')) {
wp_register_script(
'ajaxexample',
get_template_directory_uri() . '/js/ajaxexample.js',
array('jquery') );
wp_enqueue_script('ajaxexample');
wp_localize_script( 'ajaxexample', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
function example_ajax_request() {
if ( isset($_REQUEST) ) {
$fruit = $_REQUEST['fruit'];
// Trivial action
if ( $fruit == 'Banana' ) {
$fruit = 'Apple';
}
// return this to js function
echo $fruit;
}
die();
}
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );
add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
ajaxexample.js
jQuery(document).ready(function($) {
// We'll pass this variable to the PHP function example_ajax_request
var fruit = 'Banana';
// This does the ajax request
$.ajax({
url: ajax_object.ajaxurl,
data: {
'action':'nopriv_example_ajax_request',
'fruit' : fruit
},
success:function(data) {
// This outputs the result of the ajax request
alert('data:'+data);
console.log(data);
},
error: function(errorThrown){
alert(errorThrown);
console.log(errorThrown);
}
});
});
When I load 'testpage,' my ajax return looks something like:
data:
<!DOCTYPE html>
<!--[if IE 7]>
<html class="ie ie7" lang="en-US">
<![endif]-->
<!--[if IE 8]>
<html class="ie ie8" lang="en-US">
<![endif]-->
<!--[if !(IE 7) | !(IE 8) ]><!-->
<html lang="en-US">
<!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>testpage | TITLE </title>
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="MYSITEURL/xmlrpc.php">
<!-- start favicon and apple icons -->
<!-- end favicons and apple icons -->
...
My understanding is that the ajax request successfully reaches admin-ajax.php
but I do not understand the return, as I expect the wp file to pass the content to my example_ajax_request function. How can I get my ajax request to be handled properly by the intended php script?
Shouldn't your url be the following:
ajax_object.ajax_url
rather than:
ajax_object.ajaxurl
Remove no_priv
from your ajax function
$.ajax({
url: ajax_object.ajaxurl,
data: {
'action':'example_ajax_request',
'fruit' : fruit
},
success:function(data) {
// This outputs the result of the ajax request
alert('data:'+data);
console.log(data);
},
error: function(errorThrown){
alert(errorThrown);
console.log(errorThrown);
}
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With