Ajax 200成功/失败执行

时间:2014-12-07 05:06:50

标签: javascript php jquery ajax

我对ajax有一个问题,我对此有点新意。我遇到的问题是即使登录失败,ajax仍在运行成功的代码块。如何指示代码返回失败状态。

我并没有要求您更多地检查我的代码作为参考。我只需要知道如何告诉我的代码发送200以外的任何其他内容以便我可以在屏幕上显示错误。

我输入虚假信息,ajax认为登录发生了,但确实没有。

AJAX部分

jQuery(document).ready(function(){
document.body.style.paddingTop="3px";
$('a[href^="#fallr-"]').click(function(){
    var id = $(this).attr('href').substring(7);
    methods[id].apply(this,[this]);
    return false;
});
var methods = {  
    login : function(){
        var login = function(){
            var username = $(this).children('form').children('input[type="text"]').val();
            var password = $(this).children('form').children('input[type="password"]').val();
            var remember = $(this).children('form').children('input[name="remember"]').val();
            var token = $(this).children('form').children('input[name="token"]').val();
            if(username.length < 1 || password.length < 1 || token.length < 1){
                alert('Invalid!\nPlease fill all required forms');
                console.log(token)
            } else {
                var data = {
                    username: username,
                    password: password,
                    remember: remember,
                    token: token,
                }
                $.ajax({
                    type: "POST",
                    url: "login.php",
                    data: data,
                    dataType: "text",
                    success: function(data){
                        $('#error').append('Success');
                        // $.fallr.hide();
                        // window.location.href = "http://www.bettergamerzunited.com/members/";
                    },
                    error: function(data) {
                        $('#error').append('falied');
                    }
                });

            }
        }                        
        $.fallr.show({
            icon        : 'secure',
            width       : '400px',
            content     : '<h4 class="titles">Login</h4>'
                        + '<span id="error"></span>'
                        + '<form>'
                        +     '<input placeholder="Username" name="username" type="text"/'+'>'
                        +     '<input placeholder="Password" name="password" type="password"/'+'>'
                        +     '<input type="checkbox" name="remember" type="remember"/'+'> Remember Me'
                        +     '<?php echo $hidden; ?>'
                        + '</form>',
            buttons : {
                button1 : {text: 'Submit', onclick: login},
                button4 : {text: 'Cancel'}
            }
        });
    }
};
});

登录部分

require 'core/init.php';
if(Input::exists()) {
  if(Token::check(Input::get('token'))) {

    $validate = New Validate ();
    $validation = $validate->check($_POST, array(
        'username' => array('required' => true),
        'password' => array('required' => true)
    ));

    if ($validation->passed()) {

        $user = new User();

        $remember = (Input::get('remember') === 'on') ? true : false;
        $login = $user->login(Input::get('username'), Input::get('password'), $remember);
        $response = $login;
        echo $response;  // <-- Im going to have an if statement that determines if $login was true or false. But testing still.

    } else {
        foreach ($validation->errors() as $error) {
            echo $error, '<br>';
        }
    }
}
}

这是处理登录的类。

public function login($username = null, $password = null, $remember = false) {

    if(!$username && !$password && $this->exists()) {
        Session::put($this->_sessionName, $this->data()->id);
    } else {
        $user = $this->find($username);

        if($user) {
            if($this->data()->password === Hash::make($password, $this->data()->salt)) {
                Session::put($this->_sessionName, $this->data()->id);

                if($remember) {
                    $hash = Hash::unique();
                    $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));

                    if(!$hashCheck->count()) {
                        $this->_db->insert('users_session', array(
                            'user_id' => $this->data()->id,
                            'hash' => $hash
                        ));
                    } else {
                        $hash = $hashCheck->first()->hash;
                    }

                    Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
                }
                return true;
            } else {
                try{
                    throw new Exception('The Username or Password combination doesn\'t match. \n Please try again.');
                } catch(Exception $e) {
                    echo $e->getMessage();
                }
            }
        } else {
            try{
                throw new Exception('The Username you provide does not match anything in our system. Please Try again or Register.');
            } catch(Exception $e) {
                echo $e->getMessage();
            }

        }
    }

    return false;
}

2 个答案:

答案 0 :(得分:2)

你可以为ajax错误部分添加以下代码..这样你就可以知道什么是错误并且可以调试它。

error: 
    function (XMLHttpRequest, textStatus, errorThrown) {
        alert(textStatus);
        alert(errorThrown);
    }
}

答案 1 :(得分:1)

使用PHP标头功能。

header('HTTP/1.0 403 Forbidden'); // or whatever status code you want to return.

在使用标题功能之前,没有其他输出。