我认为“需要”意味着“没有它就不能工作”。它会起作用,但问题是安全性和最佳实践。即使这似乎不是必要的,但最好是稳妥行事,并始终这样做。
您必须像bellow一样将JavaScript排队,用wp_localize_script
.
function enqueue_wpse_114600()
{
wp_register_script(
\'my-ajax\' // Handle
, get_template_directory_uri() . \'/js/ajax.js\'
, array( \'jquery\' )
);
wp_enqueue_script( \'my-ajax\' );
wp_localize_script(
\'my-ajax\', // Handle
\'my_ajax\', // Object name
array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'ajaxnonce\' => wp_create_nonce( \'ajax_validation\' )
)
);
}
在本例中,JS就像bellow一样,使用对象名访问传递的值
my_ajax.any_value_you_passed
.
jQuery( document ).ready( function( $ )
{
var data = {
action: \'countHits\',
security: my_ajax.ajaxnonce
};
$.post(
my_ajax.ajaxurl,
data,
function( response ) {
if( !response.success )
{
// No data came back, maybe a security error
if( !response.data ) console.log( \'AJAX ERROR: no response\' );
else console.dir( response.data.error );
}
else console.dir( response.data );
}
);
});
在Ajax操作中,使用
check_ajax_referer
并使用这些功能
wp_send_json_*
将结果发回(很简单
true
或复杂对象)。
function countHits()
{
check_ajax_referer( \'ajax_validation\', \'security\' );
$ok = something();
if( !ok )
wp_send_json_error( array( \'error\' => __( \'Not ok.\' ) ) );
else
wp_send_json_success( $ok );
}