Dir*_*irk 18 jquery timeout image jquery-load
当load()在5秒内没有返回时,我想取消.load()操作.如果是这样,我会显示错误消息,例如'抱歉,没有图片加载'.
我拥有的是......
...超时处理:
jQuery.fn.idle = function(time, postFunction){
var i = $(this);
i.queue(function(){
setTimeout(function(){
i.dequeue();
postFunction();
}, time);
});
return $(this);
};
Run Code Online (Sandbox Code Playgroud)
...初始化错误消息超时:
var hasImage = false;
$('#errorMessage')
.idle(5000, function() {
if(!hasImage) {
// 1. cancel .load()
// 2. show error message
}
});
Run Code Online (Sandbox Code Playgroud)
...图像加载:
$('#myImage')
.attr('src', '/url/anypath/image.png')
.load(function(){
hasImage = true;
// do something...
});
Run Code Online (Sandbox Code Playgroud)
我唯一想知道的是如何取消正在运行的load()(如果可能的话).
编辑:
另一种方法:如何阻止.load()方法在返回时调用它的回调函数?
ace*_*des 11
如果你想要任何自定义处理,你就是不能使用jQuery.load()函数.您将不得不升级到jQuery.ajax(),我建议您使用它,因为您可以使用它做更多,特别是如果您需要任何类型的错误处理,它将是必要的.
使用jQuery.ajax的beforeSend选项并捕获xhr.然后你可以创建回调,它可以在超时后取消xhr,并根据需要取消回调.
此代码未经过测试,但应该让您入门.
var enableCallbacks = true;
var timeout = null;
jQuery.ajax({
....
beforeSend: function(xhr) {
timeout = setTimeout(function() {
xhr.abort();
enableCallbacks = false;
// Handle the timeout
...
}, 5000);
},
error: function(xhr, textStatus, errorThrown) {
clearTimeout(timeout);
if (!enableCallbacks) return;
// Handle other (non-timeout) errors
},
success: function(data, textStatus) {
clearTimeout(timeout);
if (!enableCallbacks) return;
// Handle the result
...
}
});
Run Code Online (Sandbox Code Playgroud)