有没有办法计算jquery ajax请求的持续时间?有时搜索需要花费太长时间,如果搜索接管,比如5秒,添加一个jquery abort()按钮会很不错。无论如何我都能做到!
在ajax请求的另一端是一个发出postgresql请求的php文件。
非常感谢任何想法!
答案 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
}
});