2014-12-07 127 views
2

我有一個問題與ajax,我有點新在這個。我遇到的問題是即使登錄失敗,Ajax仍在運行成功代碼塊。如何指導代碼返回失敗狀態。Ajax 200成功/失敗執行

我並不是要求您更多地檢查我的代碼作爲參考。我只需要知道如何告訴我的代碼發送除了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; 
} 
+0

如果還是從服務器(200),但失敗的監守錯誤的憑據,只處理像通常那樣響應有效的請求,有一個'返回FALSE',只是處理它的成功塊 – Ghost 2014-12-07 05:13:31

回答

1

使用PHP頭函數。

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

在使用標題功能之前不能輸出任何東西。

2

您可以在下面的代碼中添加ajax錯誤部分..通過這種方式您可以瞭解到底是什麼錯誤並且可以調試它。

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