我正在 wordpress 中创建一个 ajax 注册。我处理从 JS 发送到 PHP 的数据,然后使用下面的代码发回响应。
wp_send_json(array('success' => 'false', 'message' => __( 'Please select a user type.' )));
但我得到的 JSON 响应总是以 php 开始标记开头。
<?php{"success":"false","message":"Please select a user type."}
找不到导致此问题的原因。
这是我的 php 代码
<?php
if ( !is_user_logged_in() ) {
add_action( 'init', 'auth_init' );
}
function auth_init() {
wp_enqueue_script( 'user-auth-js', get_stylesheet_directory_uri() . '/assets/js/user-auth.js', array(), false, true );
add_action( 'wp_ajax_nopriv_ajax_registration', 'ajax_registration');
}
add_action( 'buddyboss_after_header', 'registration_modal' );
function registration_modal() {
if ( !is_user_logged_in() && !bp_is_register_page() ) {
$bp = buddypress();
if( empty( $bp->signup->step ) )
$bp->signup->step='request-details';
get_template_part( 'partials/content', 'registration-modal' );
}
}
/**
* Ajax Registration
*/
function ajax_registration(){
check_ajax_referer( 'ajax-register-nonce', 'security' );
$info = array();
$info[ 'user_nicename' ] = sanitize_user( $_POST[ 'username' ] );
$info[ 'nickname' ] = sanitize_user( $_POST[ 'username' ] );
$info[ 'display_name' ] = sanitize_user( $_POST[ 'username' ] );
$info[ 'user_login' ] = sanitize_user( $_POST[ 'username' ] );
$info[ 'user_pass' ] = sanitize_text_field( $_POST[ 'password' ] );
$info[ 'user_email' ] = sanitize_email( $_POST[ 'email' ] );
// Checks if user type entered is valid
if ( !$_POST[ 'user_type' ] ) {
wp_send_json(array('success' => 'false', 'message' => __( 'Please select a user type.' )));
}
elseif ( sanitize_text_field( $_POST[ 'user_type' ] ) === 'client' ) {
$info[ 'role' ] = 'client';
}
elseif ( sanitize_text_field( $_POST[ 'user_type' ] ) === 'vendor' ) {
$info[ 'role' ] = 'vendor';
}
else {
wp_send_json(array('success' => 'false', 'message' => __( 'Invalid user type selected.' )));
}
// Registers the user
$user_register = wp_insert_user( $info );
// Checks for errors returned
if ( is_wp_error( $user_register ) ) {
$error = $user_register->get_error_codes();
if ( in_array( 'empty_user_login', $error ) ) {
wp_send_json(array('success' => 'false', 'message' => __( $user_register->get_error_message( 'empty_user_login' ) )));
}
elseif ( in_array( 'existing_user_login', $error ) ) {
wp_send_json(array('success' => 'false', 'message' => __( 'This username you entered is already registered.' )));
}
elseif ( in_array( 'existing_user_email', $error ) ) {
wp_send_json(array('success' => 'false', 'message' => __( 'This email address you entered is already registered.' )));
}
}
}
/**
* Log in user
* @param string $username Username
* @param string $password Password
* @return boolean [description]
*/
function auth_user_login( $username, $password ) {
$info = array();
$info[ 'user_login' ] = $username;
$info[ 'user_password' ] = $password;
$info[ 'remember' ] = true;
$user_signon = wp_signon( $info, false );
if ( is_wp_error( $user_signon ) ) {
return false;
} else {
wp_set_current_user( $user_signon->ID );
return true;
}
}
user-auth.js
$(function () {
$( '#signup_submit' ).click(function(e) {
e.preventDefault();
var btn = $( this ).button( 'loading' );
var data = {
action: "ajax_registration",
user_type: $( 'input[name=signup_user_type]:checked', '#signup_form' ).val(),
username: $( '#signup_username' ).val(),
password: $( '#signup_password' ).val(),
email: $( '#signup_email' ).val(),
security: $( '#registration-security' ).val()
};
$.post( ajaxurl, data, function( response ) {
console.log( response );
btn.button( 'reset' );
} );
});
});
最佳答案
第一个解决方案
在您的 php 代码中与您的注册表单或表单处理程序相关的任何地方,您是否使用了类似这样的东西?
<?php function xxxxxx (){ ?>
<p>some text </p>
<?php } ?>
如果是就改成喜欢
<?php
function xxxxxx (){
$vriable = '<p>some text </p>';
return $vriable
}
第二解
wp_send_json()
处理 AJAX 调用中返回内容的所有部分。首先,它使用适当的字符集将返回内容的内容类型设置为 application/json。其次,它在发送 JSON 结果后自动调用 wp_die()
,这在 WordPress 中的 AJAX 调用中是必需的。
您可以考虑对成功请求使用 wp_send_json_success()
,对错误请求使用 wp_send_json_error()
,从而遵守 WordPress 处理 AJAX 请求的标准。这些函数在数组中设置 success
( bool 值)和 data
(任何类型)键并对整个数组进行编码,从而使您可以轻松地以结构化方式检查请求是否是成功还是出了什么问题。
我已经稍微修改了你的代码
<?php
if ( !is_user_logged_in() ) {
function auth_init() {
wp_enqueue_script( 'user-auth-js', get_stylesheet_directory_uri() . '/assets/js/user-auth.js', array(), false, true );
}
add_action( 'init', 'auth_init' );
function registration_modal() {
if ( !is_user_logged_in() && !bp_is_register_page() ) {
$bp = buddypress();
if( empty( $bp->signup->step ) )
$bp->signup->step='request-details';
get_template_part( 'partials/content', 'registration-modal' );
}
}
add_action( 'buddyboss_after_header', 'registration_modal' );
/**
* Ajax Registration
*/
function ajax_registration(){
check_ajax_referer( 'ajax-register-nonce', 'security' );
$info = array();
$info[ 'user_nicename' ] = sanitize_user( $_POST[ 'username' ] );
$info[ 'nickname' ] = sanitize_user( $_POST[ 'username' ] );
$info[ 'display_name' ] = sanitize_user( $_POST[ 'username' ] );
$info[ 'user_login' ] = sanitize_user( $_POST[ 'username' ] );
$info[ 'user_pass' ] = sanitize_text_field( $_POST[ 'password' ] );
$info[ 'user_email' ] = sanitize_email( $_POST[ 'email' ] );
// Checks if user type entered is valid
if ( !$_POST[ 'user_type' ] ) {
wp_send_json_error(array('success' => 'false', 'message' => __( 'Please select a user type.' )));
}
elseif ( sanitize_text_field( $_POST[ 'user_type' ] ) === 'client' ) {
$info[ 'role' ] = 'client';
}
elseif ( sanitize_text_field( $_POST[ 'user_type' ] ) === 'vendor' ) {
$info[ 'role' ] = 'vendor';
}
else {
wp_send_json_error(array('success' => 'false', 'message' => __( 'Invalid user type selected.' )));
}
// Registers the user
$user_register = wp_insert_user( $info );
// Checks for errors returned
if ( is_wp_error( $user_register ) ) {
$error = $user_register->get_error_codes();
if ( in_array( 'empty_user_login', $error ) ) {
wp_send_json_error(array('success' => 'false', 'message' => __( $user_register->get_error_message( 'empty_user_login' ) )));
}
elseif ( in_array( 'existing_user_login', $error ) ) {
wp_send_json_error(array('success' => 'false', 'message' => __( 'This username you entered is already registered.' )));
}
elseif ( in_array( 'existing_user_email', $error ) ) {
wp_send_json_error(array('success' => 'false', 'message' => __( 'This email address you entered is already registered.' )));
}
}
}
add_action( 'wp_ajax_nopriv_ajax_registration', 'ajax_registration');
/**
* Log in user
* @param string $username Username
* @param string $password Password
* @return boolean [description]
*/
function auth_user_login( $username, $password ) {
$info = array();
$info[ 'user_login' ] = $username;
$info[ 'user_password' ] = $password;
$info[ 'remember' ] = true;
$user_signon = wp_signon( $info, false );
if ( is_wp_error( $user_signon ) ) {
return false;
} else {
wp_set_current_user( $user_signon->ID );
return true;
}
}
}
关于php - Wordpress ajax 返回带有 php 开始标记的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859629/