2012-04-11 18 views
1

jqueryのAjaxリクエストがどのくらい長く続いているかを測定する方法はありますか?検索に時間がかかりすぎる場合があります。たとえば、検索に5秒かかるとjquery abort()ボタンを追加するといいでしょう。私はこれを行うことができますどのような方法!ajaxリクエストを受け取ります

ajaxリクエストのもう一方の端には、postgresql要求を行うphpファイルがあります。

アイデアをお寄せいただきありがとうございます。

+0

あなたがFirefoxやChromeの放火魔をダウンロードすることができます... – Dutchie432

答えて

2

sendへお電話の後setTimeout機能を追加し、中止ボタンを5秒後に表示されているように。 AJAXコマンドが完了したら、コードを追加してタイムアウトをクリアし、アボートボタンがあれば削除することができます。

var timeOutID = 0; 
$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) {  
    clearTimeOut(timeOutID); 
    // Remove the abort button if it exists. 
    } 
}); 
timeOutID = setTimeout(function() { 
       // Add the abort button here. 
       }, 5000); 

このようにして、AJAXが十分速く戻ると、中止ボタンは表示されません。

+0

ありがとう!いいアイデアだね。私は、$ .ajax({ タイプ: "POST"、 url: "search.php"のスキームでこのタイムアウトをどこで実装するのかはっきりしていません)。 – 1252748

+0

@ user1252748更新より良い例文があります。 –

2

タイムアウトオプション(http://api.jquery.com/jQuery.ajax/)をご覧ください。特定の呼び出しで設定することも、$ .ajaxSetup()でグローバルに設定することもできます。

+0

は、jqueryの/ Ajaxのタイムアウトがエラーのいくつかの並べ替えを参照してくださいませんか?同様に、コールがキャンセルされるオプションをユーザに与えるのではなく、それが発生した後に、Ajaxの処理を停止することは間違いありません。または私は間違っていますか?ありがとう。 – 1252748

+0

はい、私の理解では、オプションは、指定された時間後に操作を無条件にキャンセルするということです。私はあなたの質問を読んで、あなたがしたいことはまったくそうではありません。おそらくsetTimeout()が良い方法でしょう。 –

1

通常は、要求が送信されてから10秒後にトリガされ、その後に何か他のものにフォールバックして、それが起こっているかどうかを確認します(フォーム送信など)。

ので、変数をfalseに設定しvar failed = false;し、要求が開始と同時に要求 を行い、タイムアウトを設定します。

setTimeout(function() { 
    failed = true; 
    $("#form").submit(); 
    return false; 
}, 10000); 

AJAX呼び出しのリターン機能では、かどうかを確認します失敗した変数がtrueに設定されていれば、実際に何をしようとしていたとしても、実際には何もしないでください。そうでなければ何かを混乱させる可能性があります。新しいページが読み込まれている間に次のステップが表示された場合、対話しようとする可能性があり、ページが変更されます)。

$.post("ajaxcall.php", {'etc': "etc"}, 
    function(returned) { 
     if (failed != true) { 
      //do whatever with returned variable 
     } 
}); 
0
var timer = 0, 
    XHR = $.ajax({ 
      url: 'ajax/mypage.html', 
      beforeSend: function() { 
       timer=setTimeout(showAbort, 5000); 
      } 
      }); 

function showAbort() { 
    $('<input type="button" value="Abort" id="abort_button"/>').appendTo('#some_parent'); 
    $('#abort_button').on('click', function() { 
     XHR.abort(); //abort the Ajax call 
    }); 
} 

XHR.always(function() { //fires on both fail and done 
    clearTimeout(timer); 
    if ($('#abort_button').length) { 
     $('#abort_button').remove(); //remove button if exists 
    } 
}); 
関連する問題