2016-05-20 4 views
-1

メールがデータベース内にあるかどうかを確認するためにAJAX GETを実行する入力ボックスがあります。私は単に電子メールアドレスをチェックしており、それがデータベース内にあればtrue/else falseを取得します。したがって、返品に応じて、私はティックまたはクロスイメージを表示します。keypressでajaxコールを遅らせる方法は?

$.ajax({ 
    url: '/api/user/emailaddress/' + emailAddress, 
    type: 'GET', 
    dataType: 'json', 
    success: function(data) { 
     if (data===true) { 
      $(".email-address-validator").removeClass("success"); 
      $(".email-address-validator").addClass("error"); 
      } 
     } 
}); 

入力ボックスフィールド内でキーが押されるたびに、これが呼び出されます。私が考えている問題は、誰かがこのファイルを見て、フィールド上でAJAX GETリクエストを行っていることを確認して、その特定の入力ボックスでキーを押し続けているだけである場合があるということです。

Q:これで約5秒間、タイムアウトをどのように設定できますか?ユーザーは単にボックスをスパムし続けるだけではありませんか?

+0

http://stackoverflow.com/a/3015351/1385672 - タイムアウトを設定/解除する方法の例です。あなたはあなたのkeyup関数にそれを組み込み、タイムアウト関数の中であなたのajax呼び出しを入れてもいいです –

+0

ありがとうございます。 – DennisTurn

+2

タイムアウトクライアント側を追加しても、悪意のあるユーザーがリクエストを単独で実行してサーバーを迷惑メールにすることはありません。 サーバーサイドロジックも追加する必要があります。 –

答えて

0

このシナリオを処理するフラグを設定できます。このようなものはタイマーよりずっと優れています。

var waitingForResponse= false; 
function isValidEmail() { 
    if (!waitingForResponse) { 
     waitingForResponse = true; 
     $.ajax({ 
      url: '/api/user/emailaddress/' + emailAddress, 
      type: 'GET', 
      dataType: 'json', 
      success: function(data) { 
       waitingForResponse= false; 
       if (data===true) { 
        $(".email-address-validator").removeClass("success"); 
        $(".email-address-validator").addClass("error"); 
       } 
      } 
     }); 
    } 
} 

このデザインパターンは、最初の応答が受信されるまで後続の要求を防止します。この提案よりも要求間隔の間隔が必要な場合は、成功コールバック内のsetTimeout関数でwaitingForResponseフラグをラップすることができます。ように:

var waitingForResponse= false; 
function isValidEmail() { 
    if (!waitingForResponse) { 
     waitingForResponse = true; 
     $.ajax({ 
      url: '/api/user/emailaddress/' + emailAddress, 
      type: 'GET', 
      dataType: 'json', 
      success: function(data) { 
       setTimeout(function() { 
        waitingForResponse= false; 
       }, 5000); 
       if (data===true) { 
        $(".email-address-validator").removeClass("success"); 
        $(".email-address-validator").addClass("error"); 
       } 
      } 
     }); 
    } 
} 
関連する問題