2016-04-12 8 views
1

私の研究終了プロジェクトのWeb Spring MVC 4アプリケーションで作業中です。アプリケーションはウェブandroidのクライアントに接続する必要があります。JQueryでログの失敗と404をキャッチしようとしています

私は@RestControllerを使用して、アンドロイドアプリがjson経由で簡単に通信できるようにしました。私は接続の失敗をキャッチしようとしていますex:ウェブアプリケーションでも、Webアプリケーションであっても、私はAjaxを介してサーバーとほぼすべての通信を行い、ユーザーをよりリラックスさせることを望んでいました(プログレスバー、ライブ情報のヒント。 ..)しかし、jQueryのevent.preventDefault()を使用した後の国の問題の1つに、次のアクションや応答ページが読み込まれて見えなくなってしまいます。例えばここに私のログインページの例である:

login.js

jQuery(document).ready(function ($) { 
    $("#login-form").submit(function (event) { 
     //Do somthing... 
     // Call login function 
     logViaAjax(event); 
     // Prevent the form from submitting via the browser. 
     return false; //Or using event.preventDefault() 
    }); 
}); 

// logViaAjax function 
function logViaAjax(event) { 
    var logObj = {}; 
    logObj["username"] = $("#username").val(); 
    logObj["password"] = $("#password").val(); 
    //the response 
    $.ajax({ 
     type: "POST", 
     contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
     url: "/login", 
     data: logObj, 
     dataType: 'text', 
     timeout: 10000, 
    success: function (data) { 
     if (data.indexOf("login-box") !== -1) { 
      showLogFail(); 
     }else{ 
      window.location.reload(); 
      //I dont need to reload the page because this gives me login page again... May be if there is a way to get the URL from data!? 
     } 
    }, 
    error: function() { 
     showWarning(); 
    } 
    }); 

私は真偽を処理するためにSpring Security 4を使用していますし、我々はそれがURLの元を与えることを知っている:失敗の/login?failと要求しますページが成功すれば、私は最近loginUrlに入る前にリダイレクトすることを知っていました。私の元/login。ユーザーがサーバー側にログインしてjson応答を送信したかどうかをテストしようとしましたが、ログインを要求する前にページが失われる可能性があります。

は、私は、URLのjQueryにロードされた(しかし示したではないが)?failが含まれているか、いない場合、私は、ログまたはパスワードを変更するようにユーザーに通知するために、success: function()にテストするべきだと思います。それ以外の場合は、ページのユーザーの必要性がバックに請求され、必要なものはすべて表示することです。それらのほとんどの変更後


UPDATE

私が作るために必要なものすべてがちょうどログインページを超えるページを維持し、それを再表示することです。この機能はSpring Securityによって自動的に提供されますが、バックグラウンドで実行されています。私の場合は元のユーザクリック/messengerアプリは、彼はそれが再び/messengerに彼を送って、正常にログイン他に、それは/login?failを与えるが、このページが原因jQueryのに見えないされるログイン彼が失敗した場合、ログインする/loginに彼をリダイレクト...

答えて

1

はこれを試してみてください

var flag; 
jQuery(document).ready(function ($) { 
    $("#login-form").submit(function (event) { 
     //Do somthing... 
     // Call login function 
     logViaAjax(event); 
     if(flag.status == 404){ 
      return false; 
     } 
    }); 
}); 


function logViaAjax(event) { 
    var logObj = {}; 
    logObj["username"] = $("#username").val(); 
    logObj["password"] = $("#password").val(); 
    //the response 
    flag = $.ajax({ 
     type: "POST", 
     contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
     url: "/login", 
     data: logObj, 
     dataType: 'text', 
     timeout: 10000, 
     success: function (data) { 
      //Here to move to the page unseen if success and show error hint if it fail... 
     }, 
     error: function() { 
      showWarning(); //Show error alerts, this part is DONE! 
     } 
    }); 

変更内容

►変数にAJAXを割り当てられ、jQuery(document).ready

の状態をdded

AJAX - The onreadystatechange Event

Demo Fiddle to show 404 error

+0

この試みは助けにはならない、あなたはフラグについてよろしいですか?それは私のために意味がないように見える。私はあなたが何かを忘れたと思う... –

+0

@MalekBoubakri私はデモのフィドルを追加しました。それを見てください。 –

+0

私はそれをチェックします。あなたは私がする必要があるものを得ることはできません、あなたのアイデアを慎重に最後の更新を慎重にチェックしてください。再度ありがとう@RinoRaj –

関連する問題