7

AJAX呼び出しを発行するクライアントがあります。これらの呼び出しは、サーバー側のSpringSecurityによって保護されているURLを参照します。ユーザーのセッションがタイムアウトした場合、ライトボックスにログインフォームのポップアップが表示されます。ユーザーが正常にログインした後、クライアントにAJAX呼び出しを再実行してもらいたい。

AJAX呼び出しを行うクライアント側コードの例を次に示します。

function handleSearchClick(evt) {
    var setupOptions = { 
        success: loadSearch,
        type: "POST",
        dataType: "json",            
        url:   "../search.ajax",
        error: handleError, // how can I pass callback info i.e. I want to be able to execute $("#searchForm").ajaxSubmit(setupOptions); from handleError? 
        timeout: 50000
    };                
    $("#searchForm").ajaxSubmit(setupOptions);
}

認証が失敗すると、サーバーは401を返し、その結果、クライアントはhandleErrorを呼び出します。handleErrorにコールバック関数を渡すことは可能ですか?コールバックを再実行したい

$("#searchForm").ajaxSubmit(setupOptions);

セッションがタイムアウトしたAJAX呼び出しでサーバーが成功応答を返すというこの問題の解決策を見てきました。次に、success関数は、セッションタイムアウトを知るために、応答で何かを探します。次に、クライアントはそこにコールバック関数を格納します。私はこれをエラー関数で処理することを好みます。

4

3 に答える 3

3

によって実行されたリクエスト

$("#searchForm").ajaxSubmit(setupOptions);

次の呼び出しにより、handleError関数で再実行できます。

$.ajax(this);

再実行するためにコールバック関数を渡す必要はありません。

$("#searchForm").ajaxSubmit(setupOptions);
于 2013-01-16T03:00:27.540 に答える
2

ここで言及しました:ページを更新せずにフォームを送信するにはどうすればよいですか?

これは、エラーハンドラーのコールバックを作成する方法です。

$.ajax({
    url: siteUrl + 'fetch/search',
    type: "POST",
    data: formData,
    success: function(data) {
      .....
    },
    error:function(x,e){
        if(x.status==0){
            alert('You are offline!!\n Please Check Your Network.');
        }else if(x.status==404){
            alert('Requested URL not found.');
        }else if(x.status==500){
            alert('Internel Server Error.');
        }else if(e=='parsererror'){
            alert('Error.\nParsing JSON Request failed.');
        }else if(e=='timeout'){
            alert('Request Time out.');
        }else {
            alert('Unknow Error.\n'+x.responseText);
        }
    }
});

しかし、あなたは次のことをすることができます

function handleSearchClick(evt) {
    var setupOptions = { 
        success: loadSearch,
        type: "POST",
        dataType: "json",            
        url:   "../search.ajax",
        error: handleError(x,e), // this should do it
        timeout: 50000
    };                
    $("#searchForm").ajaxSubmit(setupOptions);
}
于 2013-01-07T21:15:06.997 に答える
2

救助のための閉鎖:

function handleSearchClick(evt) {
    var setupOptions = {
        success: loadSearch,
        type: "POST",
        dataType: "json",
        url: "../search.ajax",
        timeout: 50000
    };
    setupOptions.error = handleError(setupOptions);
    $("#searchForm").ajaxSubmit(setupOptions);
}

function handleError(setupOptions) {
    return function () {
        // handle error

        // then re-submit
        $("#searchForm").ajaxSubmit(setupOptions);
    };
}

これにより参照ループが作成されることに注意してください(setupOptionsにはhandleErrorによって返されるエラー関数への参照があり、エラー関数にはsetupOptionsへの参照があります)が、これは適切なブラウザーによって簡単にガベージコレクションされるはずです。

于 2013-01-16T11:19:51.163 に答える