我创建了一个登录页面,该页面使用ajax记录用户并验证凭据。
如果用户已被禁用,那么我想显示一条消息,说明该用户已被禁用。当我通过jquery POST时,我发布了一个名为admin-ajax.php的页面
如果用户被禁用,我会收到/ wp-login?disabled = 1的返回URL
如何修改我的脚本以查看GET是否已禁用,如果是,则更改按钮文本。
jQuery('#wp-submit').on( 'click',function(){
var clicked = jQuery(this);
clicked.val('Logging In...');
var commit = clicked.parent().parent().serialize();
var data = {
action: 'ts_dash_action',
screen: 'sign_on',
param: { form : commit
/* log: 'admin', pwd: 'pass','wp-submit': 'Log In',redirect_to: 'http:/.beresponsive.net',testcookie:1*/
}};
jQuery.post(dash_ajax.ajaxurl, data, function(response) {
//clicked.val(response);
if(response == 'Error - Retry') {
clicked.addClass('button-error');
setTimeout(function(){
clicked.val('Login');
clicked.removeClass('button-error');
},2000);
} else if(response == 'Redirecting...'){
window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
window.location = window.location.origin;
} else if ([THE GET HAS A PARAMATER OF 'DISABLED']) {
clicked.addClass('button-error');
clicked.val('Email no valid')
}
});
return false;
});
以下是页面http://goo.gl/5j1lEx,已停用的帐户是用户名:dis,pass:dis
答案 0 :(得分:0)
实际上,你无法在jquery ajax响应上处理302重定向。您需要为wordpress的ajax登录编写自己的代码;
functions.php
中的
add_action( 'init', 'custom_ajax_login' );
function custom_ajax_login() {
wp_register_script( 'ajax-login-js', plugin_dir_url( __FILE__ ) . 'js/ajax-login.js', array('jquery') );
wp_enqueue_script( 'ajax-login-js' );
wp_localize_script( 'ajax-login-script', 'dash_ajax', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'redirecturl' => home_url()
));
add_action( 'wp_ajax_nopriv_ajaxlogin', 'ajax_login' );
}
function ajax_login() {
check_ajax_referer( 'ajax-login-nonce', 'security' );
$login_form_data = array();
$login_form_data['user_login'] = $_POST['username'];
$login_form_data['user_password'] = $_POST['password'];
$login_form_data['remember'] = true;
$user_data = wp_signon( $login_form_data, false );
if ( is_wp_error( $user_data )) {
$response = array(
'loggedin'=> false,
'message'=> $user_data->get_error_message()
);
} else {
$response = array(
'loggedin'=> true,
'message'=> __('Login success!' )
);
}
echo json_encode( $response );
die();
}
在ajax-login.js
,
jQuery(document).ready(function($){
$('#login_form').on('submit', function(e){
$('#login_form p.status').show().text("Sending request...");
$.ajax({
type: 'POST',
dataType: 'json',
url: dash_ajax.ajaxurl,
data: {
'action': 'ajaxlogin', //calls wp_ajax_nopriv_ajaxlogin
'username': $('#username').val(),
'password': $('#password').val(),
'security': $('#security').val() },
success: function(data){
$('#login_form p.status').text(data.message);
if (data.loggedin == true){
document.location.href = dash_ajax.redirecturl;
}
}
});
e.preventDefault();
});
});
答案 1 :(得分:0)
最简单的方法是添加另一个条件,这样如果它不是两个中的任何一个,那么它必须是第三个选项。虽然我不能轻易发现它,但我可以排除它
jQuery('#wp-submit').on( 'click',function(){
var clicked = jQuery(this);
clicked.val('Logging In...');
var commit = clicked.parent().parent().serialize();
var data = {
action: 'ts_dash_action',
screen: 'sign_on',
param: { form : commit
/* log: 'admin', pwd: 'pass','wp-submit': 'Log In',redirect_to: 'http:/.beresponsive.net',testcookie:1*/
}};
jQuery.post(dash_ajax.ajaxurl, data, function(response) {
//clicked.val(response);
if(response == 'Error - Retry') {
clicked.addClass('button-error');
setTimeout(function(){
clicked.val('Login');
clicked.removeClass('button-error');
},2000);
} else if(response == 'Redirecting...'){
window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
window.location = window.location.origin+'/edit-profile/';
} else {
clicked.addClass('button-error');
clicked.val('Email not confirmed')
}
});
return false;
});