Я застрял в этом на день или два, а потом обнаружил, что забыл включить json_encode в функцию обратного вызова.
В .js, расположенном в каталоге плагина, я написал это:
jQuery.ajax({
type: 'POST',
dataType: 'json',
data:{
'action': 'do_ajax',
'func': 'yell_out',
'var': 'hi there'
},
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/json;charset=UTF-8");
}
},
url: ajax_url,
success:function(data){
alert('success: ' + data);
},
error: function(errorThrown){
alert('oh no: ' + errorThrown);
});
}
Для части php это:
add_action('wp_ajax_do_ajax', 'do_ajax_callback');
function do_ajax_callback(){
switch($_REQUEST['fn']){
case 'yell_out':
$output = yell_out($_REQUEST['id']);
break;
default:
$output = 'No function specified, check your jQuery.ajax() call';
break;
}
$output = json_encode($output);
if(is_array($output)){ print_r($output); }
else{ echo $output; }
die();
}
function yell_out($string){
return $string;
}