如何取消jquery.load()?

前端之家收集整理的这篇文章主要介绍了如何取消jquery.load()?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当load()在5秒钟内没有返回时,我想取消一个.load()操作。如果是这样,我会显示一个错误信息,如“抱歉,没有图片加载”。

我有什么

…超时处理:

  1. jQuery.fn.idle = function(time,postFunction){
  2. var i = $(this);
  3. i.queue(function(){
  4. setTimeout(function(){
  5. i.dequeue();
  6. postFunction();
  7. },time);
  8. });
  9. return $(this);
  10. };

…初始化错误消息超时:

  1. var hasImage = false;
  2.  
  3. $('#errorMessage')
  4. .idle(5000,function() {
  5.  
  6. if(!hasImage) {
  7. // 1. cancel .load()
  8. // 2. show error message
  9. }
  10. });

…图像加载:

  1. $('#myImage')
  2. .attr('src','/url/anypath/image.png')
  3. .load(function(){
  4. hasImage = true;
  5. // do something...
  6. });

我唯一无法想像的是如何取消运行的load()(如果可能的话)。

编辑:

另一种方法:如何防止.load()方法在返回时调用它的回调函数

解决方法

如果你想要这样的自定义处理,你根本无法使用jQuery.load()函数。你必须升级到jQuery.ajax(),我建议,因为你可以做更多的这一点,特别是如果你需要任何种类的错误处理,这将是必要的。

对jQuery.ajax使用beforeSend选项并捕获xhr。然后,您可以创建回调,可以在超时后取消xhr,并根据需要进行回调。

这段代码没有测试,但应该让你开始。

  1. var enableCallbacks = true;
  2. var timeout = null;
  3. jQuery.ajax({
  4. ....
  5. beforeSend: function(xhr) {
  6. timeout = setTimeout(function() {
  7. xhr.abort();
  8. enableCallbacks = false;
  9. // Handle the timeout
  10. ...
  11. },5000);
  12. },error: function(xhr,textStatus,errorThrown) {
  13. clearTimeout(timeout);
  14. if (!enableCallbacks) return;
  15. // Handle other (non-timeout) errors
  16. },success: function(data,textStatus) {
  17. clearTimeout(timeout);
  18. if (!enableCallbacks) return;
  19. // Handle the result
  20. ...
  21. }
  22. });

猜你在找的jQuery相关文章