ajax与action,WordPress主题开发之wp_ajax_{$action}和wp_ajax_nopriv_{$action}的区别

用admin-ajax.php来处理Ajax请求

Ajax请求应该被指向wp-admin/admin-ajax.php, 文件名中的”admin”可能会引起困惑, 但是不管是前台的还是后台的Ajax请求都是在admin-ajax.php处理的.
admin-ajax.php发送请求的时候, 有一个必须的参数是action, 因为admin-ajax.php需要根据用户是否登陆了来触发不同的hooks

// 如果没登陆, 会触发这个hook
do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] );
 
// 如果登陆了, 会触发这个hook
do_action( 'wp_ajax_' . $_POST['action'] );

发出Ajax请求的代码大概如下:

jQuery.post(
       MyAjax.ajaxurl,
       {
            action : 'myajax-submit',
            postID : MyAjax.postID
       },
       function( response ) {
            alert( response );
       }
);

现在, 我们只需要在我们的主题文件中处理一下Ajax请求, 并不需要在单独的文件中来处理

add_action( 'wp_ajax_nopriv_myajax-submit', 'myajax_submit' );
add_action( 'wp_ajax_myajax-submit', 'myajax_submit' );
 
function myajax_submit() {
	$postID = $_POST['postID'];
	$response = json_encode( array( 'success' => true ) );
 
	header( "Content-Type: application/json" );
	echo $response;
 
	// 这个很关键啊有木有: 别忘记 "exit"
	exit;
}

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注