问题和修复
AJAX脚本错误:您的jQuery代码有一个拼写错误:jQuery(document).reday应该是jQuery.ready。此外,数据类型应该是datatype。
表单处理:您的loginForm具有method=“post”属性,但它应该在标签中,而不是标签中。
排队JavaScript:您应该使用wp_enqueue_script而不是wp_enqueues_style来包含您的JavaScript文件。此外,请确保使用wp_localice_script将AJAX URL和任何本地化数据传递到您的JavaScript文件。
处理AJAX请求:确保您的WordPress functions.php或插件文件中有一个处理程序来处理AJAX请求。
jQuery(document).ready(function ($) {
$('#loginForm').on('submit', function (event) {
event.preventDefault();
let user_email = $('#userEmail').val();
let user_password = $('#userPassword').val();
let notify = $('.alert');
$.ajax({
url: ajaxurl, // 'ajaxurl' is provided by WordPress
type: 'post',
dataType: 'json',
data: {
action: 'app_auth_login',
user_email: user_email,
user_password: user_password
},
success: function (response) {
if (response.success) {
notify.removeClass('alert-error').addClass('alert-success').text('Login successful').show();
} else {
notify.removeClass('alert-success').addClass('alert-error').text(response.data.message).show();
}
},
error: function () {
notify.removeClass('alert-success').addClass('alert-error').text('There was an error').show();
}
});
});
});
function app_auth_load_assets() {
wp_register_style('app_auth_style', APP_AUTH_URL . 'assets/css/auth.css');
wp_enqueue_style('app_auth_style');
wp_register_script('app_auth_script', APP_AUTH_URL . 'assets/js/auth.js', ['jquery'], null, true);
wp_enqueue_script('app_auth_script');
// Make sure to localize script to pass AJAX URL
wp_localize_script('app_auth_script', 'app_auth_vars', [
'ajax_url' => admin_url('admin-ajax.php')
]);
}
add_action(“wp_enqueue_scripts”、“app_auth_load_assets”);
function app_auth_login() {
// Check nonce for security
// if ( !isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'app_auth_nonce') ) {
// wp_send_json_error(['message' => 'Invalid nonce']);
// return;
// }
// Retrieve email and password from AJAX request
$email = sanitize_email($_POST['user_email']);
$password = sanitize_text_field($_POST['user_password']);
$user = wp_authenticate($email, $password);
if (is_wp_error($user)) {
wp_send_json_error(['message' => $user->get_error_message()]);
} else {
wp_set_auth_cookie($user->ID);
wp_send_json_success();
}
}
add_action('wp_ajax_app_auth_login'、'app_auth_login');
add_action('wp_ajax_nopriv_app_auth_login'、'app_auth_login');
解释
JavaScript更改:
将jQuery(document).reday更改为jQuery(documents).ready。
已将数据类型更正为datatype。
将ajaxurl用于AJAX请求URL,当您本地化脚本时,WordPress会自动提供该URL。
Enqueue脚本:
使用wp_enqueue_script for JavaScript和wp_localice_script将AJAX URL传递给脚本。
PHP处理程序:
添加了错误检查和用户身份验证。
使用wp_send_json_success()和wp_send_ json_error()进行正确的AJAX响应处理。
有了这些更改,您的AJAX登录表单应该可以正常工作,根据登录尝试的成功或失败向用户提供反馈。