Javascript 对ajax请求计时

Javascript 对ajax请求计时,javascript,ajax,jquery,Javascript,Ajax,Jquery,有没有办法确定jQueryAjax请求持续了多长时间?有时搜索时间太长,如果搜索时间超过5秒,最好添加jquery abort()按钮。无论如何我都能做到 ajax请求的另一端是发出postgresql请求的php文件 非常感谢你的建议 看看超时选项(http://api.jquery.com/jQuery.ajax/). 您可以在特定调用中设置它,也可以使用$.ajaxSetup()全局设置它。查看超时选项(http://api.jquery.com/jQuery.ajax/). 您可以在

有没有办法确定jQueryAjax请求持续了多长时间?有时搜索时间太长,如果搜索时间超过5秒,最好添加jquery abort()按钮。无论如何我都能做到

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


非常感谢你的建议

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

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

通常,我会在发送请求后设置一个超时,该超时将在大约10秒后触发,然后回退到其他方法以确保它仍然发生(例如,表单提交)

因此,将变量设置为false,
var failed=false并执行请求
在请求启动的同时,设置超时:

setTimeout(function() {
    failed = true;
    $("#form").submit();
    return false;
}, 10000);
在ajax调用的返回函数中,检查失败的变量是否已设置为true,如果设置为true,则不要执行它最初尝试的任何操作,否则它可能会搞糟某些事情,或者在发生其他事情时混淆用户(由于这些事情通常发生在较慢的internet连接上,如果在加载新页面时出现下一步,他们可能会尝试进行交互,然后页面将发生更改)


通常,我会在发送请求后设置一个超时,该超时将在大约10秒后触发,然后回退到其他方法以确保它仍然发生(例如,表单提交)

因此,将变量设置为false,
var failed=false;
并执行请求 在请求启动的同时,设置超时:

setTimeout(function() {
    failed = true;
    $("#form").submit();
    return false;
}, 10000);
在ajax调用的返回函数中,检查失败的变量是否已设置为true,如果设置为true,则不要执行它最初尝试的任何操作,否则它可能会搞糟某些事情,或者在发生其他事情时混淆用户(由于这些事情通常发生在较慢的internet连接上,如果在加载新页面时出现下一步,他们可能会尝试进行交互,然后页面将发生更改)


要使中止按钮在5秒后出现,请在调用
send
后添加
setTimeout
函数。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返回速度足够快,中止按钮将永远不会出现。

要使中止按钮在5秒后出现,请在调用
send
后添加
setTimeout
函数。一旦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);   
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
    }
});
这样,如果AJAX返回速度足够快,中止按钮将永远不会出现。

var timer=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
    }
});
XHR=$.ajax({ url:'ajax/mypage.html', beforeSend:function(){ 定时器=设置超时(showAbort,5000); } }); 函数showAbort(){ $(“”).appendTo(“#某些家长”); $(“#中止按钮”)。在('单击',函数()上{ 中止();//中止Ajax调用 }); } 总是(函数(){//在失败和完成时都激发 清除超时(计时器); 如果($('#中止按钮')。长度){ $(“#中止按钮”).remove();//如果存在,则删除按钮 } });
var定时器=0,
XHR=$.ajax({
url:'ajax/mypage.html',
beforeSend:function(){
定时器=设置超时(showAbort,5000);
}
});
函数showAbort(){
$(“”).appendTo(“#某些家长”);
$(“#中止按钮”)。在('单击',函数()上{
中止();//中止Ajax调用
});
}
总是(函数(){//在失败和完成时都激发
清除超时(计时器);
如果($('#中止按钮')。长度){
$(“#中止按钮”).remove();//如果存在,则删除按钮
}
});

您可以下载firefox或chrome的firebug…您可以下载firefox或chrome的firebug…谢谢!这听起来是个好主意。我不太清楚在$.ajax({type:“POST”,url:“search.php”)的方案中在何处实现此超时,…我把它放在哪里?@user1252748更新了更好的示例文本。谢谢!这听起来是个好主意。我有点不清楚在$.ajax({type:“POST”,url:“search.php”)的方案中在哪里实现这个超时,…我应该把它放在哪里?@user1252748更新了更好的示例文本。jquery/ajax超时不是指某种错误吗?比如,它肯定会在发生后停止处理ajax,而不是给用户取消调用的选项。或者我错了吗?谢谢。是的,我的理解是,该选项无条件地取消调用他在指定的时间内完成了操作。当我重新阅读您的问题时,这并不是您希望执行的操作。setTimeout()也许是一种更好的方式。jquery/ajax超时不是指某种错误吗?比如,它肯定会在发生这种错误后停止处理ajax,而不是给用户取消调用的选项。还是我错了?谢谢。是的,我的理解是,该选项在指定数量后无条件取消操作当我重读你的问题时,这并不是你想要做的。setTimeout()也许是一个更好的方法。