0

Ajaxリクエストを使用してJqueryでフォームを投稿しています。

$.ajax( 
        { 
            type: "POST", 
            url: "login.php", 
            data: $("#signin").serialize(),
            dataType: "json",
            cache: false,
            success: function(data, textStatus) {
                if (data.redirect) {
                    window.location.replace(data.redirect);
                }
                else {
                    $('#some').fadeOut(200);
                    $('#some2').fadeIn(200);
                    $("#some3").html(data.form);
                    $("#some").delay(2000).fadeOut(200);
                    $('#some2').delay(2800).fadeIn(300);
                }
            }           
        });

これで、「ログイン」ボタンをクリックするとすぐにajaxリクエストが実行されます。ここでの問題は、ボタンを2回以上押すと、elseケースが数回実行され、#some、#some2、および#some3がフェードアウトして数回発生することです。では、リクエストがすべて送信されているかどうかを確認するにはどうすればよいですか(データベースに何かを書き込む必要はありません)。

4

5 に答える 5

0

login_in_processログイン時にブールフラグを作成し、このフラグのtrue値を確認します。trueそして、それが空のリターンを作る場合は、クリックするたびにこのフラグをチェックしてください。成功とエラーのコールバックでそれをfalse状態に設定します。

于 2012-05-04T16:20:03.543 に答える
0

ブール値を使用して、クリックされたかどうかを記録できます。

var loginClicked = false;

$('input_button_element').click(function(){
  if (!loginClicked) {
    loginClicked = true;
    // your js here - you may want to add some visual feedback to the user also
  }
});
于 2012-05-04T16:21:20.360 に答える
0

グローバル変数を作成できます

var loginClick = false;

メソッド内で、最初にその値を確認します

if (!loginClick) {
  loginClick = true;
  //your ajax code;
}
于 2012-05-04T16:21:21.333 に答える
0

ここから:

.one()メソッドを使用して、ajaxコールバックで再設定できます。

function doAjax(){
    // Your Ajax call.
    $.ajax({..., complete: function() {
        // Ajax call done, re-enabling the button/link
        $("#buttonId").one('click', doAjax);
    }, ...});
}

$("#buttonId").one('click', doAjax);
于 2012-05-04T16:23:26.313 に答える
0

ブール値をグローバルスコープに格納する必要があります。たとえば、ウィンドウオブジェクトに格納されているものです。

if (!window.isClicked) {
    window.isClicked = true;
    ...Do your ajax call here        
}

ajax()の成功コールバックだけでなく、常にwindow.isClickedの値を復元することを忘れないでください。

var jqxhr = $.ajax( ... )
.done(function() {  })
.fail(function() {  })
.always(function() { window.isClicked = false });
于 2012-05-04T16:23:54.107 に答える