有没有办法在$.get()
中设置超时时间?
因为我希望我的脚本发出警告说加载需要一些时间(可能是因为服务器繁忙或其他原因) 似乎无法在任何地方找到它。
答案 0 :(得分:25)
只需使用$.ajax(...)
:
$.ajax({
url: url,
success: function(data){
//...
},
timeout: 1000 //in milliseconds
});
同样如下面评论中所述,您可以使用.ajaxSetup(...)
全局应用超时:
$.ajaxSetup({timeout:1000}); //in milliseconds
答案 1 :(得分:4)
$.get
只是$.ajax
的一个很好的简写,它有一个timeout
选项,用于指定脚本在取消回调之前等待的时间。
您可以使用$.ajaxSetup({timeout: 9001})
覆盖全局默认值,这样您就可以继续使用$.get
。
如果您只是想在不取消请求的情况下提醒用户,请使用$.ajax
,设置超时,并取消complete
回拨中的超时。
这是一些示例初学者代码,我还没有对它进行任何测试,它可能会变成一个有点工作的插件:
(function(){
var t, delay;
delay = 1000;
$('.delay-message').ajaxStart(function () {
var $this;
$this = $(this);
t = setTimeout(function () {
$this.trigger('slowajax');
}, delay);
}).ajaxComplete(function () {
if (t) {
clearTimeout(t);
}
});
}());
$('.delay-message').on('slowajax', function () {
$(this).show().delay(2000).fadeOut(1000);
});
答案 2 :(得分:3)
$.ajaxSetup({
timeout:2000 // in milliseconds
});
//your get request here
答案 3 :(得分:2)
致电$.ajax
并传递timeout
选项。
答案 4 :(得分:1)
只需使用.ajax()
即可;毕竟.get()
只是一个包装器。你可以这样做:
function doAjax() {
var $warning = $("#warning").hide(), // Always hide to start with
warningTimeoutId = 0;
warningTimeoutId = window.setTimeout(function () {
$warning.show();
}, 10000); // wait 10s before showing warning
$.ajax({
timeout: 30000, // 30s timeout
complete: function () {
// Prevent the warning message from appearing
window.clearTimeout(warningTimeoutId);
}
... // other config
});
}
这里在Ajax调用之前启动超时,除非Ajax请求已经完成,否则将在10秒后显示。
答案 5 :(得分:0)
如果要在发生超时时轻松显示自定义错误消息(否则将不调用$ .get-completion回调),可以使用以下方法:
$.ajaxSetup({
timeout: 1000,
error: function(XMLHttpRequest, textStatus, errorThrown) {
if (textStatus == 'timeout') {
// timeout occured
} else {
// other error occured (see errorThrown variable)
}
}
});