Ajax查询字符串有条件

时间:2014-03-26 09:56:42

标签: javascript php ajax wordpress query-string

我创建了一个登录页面,该页面使用ajax记录用户并验证凭据。

如果用户已被禁用,那么我想显示一条消息,说明该用户已被禁用。当我通过jquery POST时,我发布了一个名为admin-ajax.php的页面

如果用户被禁用,我会收到/ wp-login?disabled = 1的返回URL enter image description here 如何修改我的脚本以查看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

2 个答案:

答案 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;
});