时间ajax请求

时间:2012-04-11 18:33:24

标签: javascript ajax jquery

有没有办法计算jquery ajax请求的持续时间?有时搜索需要花费太长时间,如果搜索接管,比如5秒,添加一个jquery abort()按钮会很不错。无论如何我都能做到!

在ajax请求的另一端是一个发出postgresql请求的php文件。

非常感谢任何想法!

4 个答案:

答案 0 :(得分:3)

查看超时选项(http://api.jquery.com/jQuery.ajax/)。您可以在特定调用上设置它,也可以使用$ .ajaxSetup()全局设置它。

答案 1 :(得分:2)

要在5秒后显示中止按钮,请在致电setTimeout后添加send功能。完成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返回足够快,则不会出现中止按钮。

答案 2 :(得分: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
        }
});

答案 3 :(得分: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
    }
});