2017-07-06 7 views
0

これはlogin controllerの中核スクリプトです。つまり、ユーザのすべてのサニタイズと検証が完了しました。 login.phpphpリダイレクトの原因でajaxリダイレクトが発生する

try { 
    LoginController::UserLogin(); // Calling my method inside my controller 
} catch (Exception $e) { 

    echo json_encode(array(
     'error' => array(
      'msg' => $e->getMessage() 
     ), 
    ), JSON_PRETTY_PRINT); 
    header('Content-Type: application/json'); 
    exit; 

} 


<form id="login_form" action="<?php echo htmlspecialchars(pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME)); ?>" class="form" method="POST"> 
    <div class="form-group"> 
     <input type="text" name="login_username" placeholder="Enter username" class="form-control" /> 
    </div> 
    <div class="form-group"> 
     <input type="password" name="login_pass" placeholder="Enter password" class="form-control" /> 
    </div> 
    <div class="form-group"> 
     <input type="text" name="login_security" placeholder="Enter Security 25 * 2" class="form-control" /> 
    </div> 
    <button class="btn btn-green" id="login-btn">Login</button> 

</form> 

私のAjaxの一部

$('#login_form #login-btn').on('click', function (e) { 
    e.preventDefault(); 

    $.ajax({ 
     url : $('#login_form').attr('action'), 
     type: 'POST', 
     dataType: 'json', 
     data: $('#login_form').serialize(), 
     success: function(data) { 
      console.log(data); 
      if (data.error) { 
       $('.error').html('<div class="alert alert-danger">' + data.error.msg + '</div>'); 
      } 
      if (data.result === 'success') { 
       $('.error').html('<div class="alert alert-unknown">' + data.msg + '</div>'); 
       setTimeout('window.location.href = "user/profile.php";',3000); 
      } 
     } 
    }); 
}); 

私の問題内側LoginController.php

if (password_verify($valid['pass'], $pass)) { 
    // My session stuffs 

    header('Content-Type: application/json'); 
    echo json_encode (array(
     'result' => 'success', 
     'msg' => 'Login successful..! You will be redirected in a moment' 
    )); 
    redirect('user/profile'); //Ajax redirect only works when I remove this. 
    exit; 
} 

コード内部

コード:私はAJAXを使用するまで、すべてが正常に動作します。つまり、Ajaxのないページにはエラーが表示され、すべて正常です。しかし、私はajaxを使用するとエラーが返されますが、ログインの詳細が正しい場合(有効な詳細)、ページが停止します(ページはリダイレクトされません)。

私が見るものはログインページの302ですが、リダイレクトは行われていません(ただし、ログインコントローラのフォームからヘッダーを削除すると、これはユーザーにJavaScript無効)。

enter image description here

+0

をあなたは '、304'を' 302'のない意味しますか?もしそうなら、それは完全に有効な応答です –

+0

これは302エラーです。そして問題は、ページがajaxでリダイレクトされないということです。 –

答えて

0

これを試してみて、それが動作するかどうかを確認:LoginController.phpで

echo部分の後redirectを削除します。

Login.phpにはechoの部分の前にheaderを入れてください。 Ajaxの一部で

、このようなsuccess一部チャゲ:

success: function(data) { 
     console.log(data); 
     if (data.error) { 
      $('.error').html('<div class="alert alert-danger">' + data.error.msg + '</div>'); 
     } 
     if (data.result === 'success') { 
      $('.error').html('<div class="alert alert-unknown">' + data.msg + '</div>'); 
      // -> here 
      // correct setTimeout function 
      setTimeout(function(){ 
       window.location = "user/profile.php"; 
      },3000); 
     } 
    } 
+0

ajaxの部分は正常に動作していますが、JavaScriptが無効になっているときは生のjsonが出力されます。 –

+0

はい、AjaxとJqueryはJavaScriptなしでは動作しません。 JSを使わずにページを動作させたい場合、フォームをjsなしで送信する場合は "ajax = 0"、jsが動作している場合は "ajax = 1"のようなパラメータを送信する必要があります。 phpファイルでは、 "ajax"パラメータをチェックして、何をすべきかを決めます。 (Jsonを送る、または直接リダイレクトする) – verjas

関連する問題