避免 jQuery blockUI 中 javascript 错误的代码 pausing/freezing

Avoid code pausing/freezing on javascript error in jQuery blockUI

让我来解释一下...

我们正在使用 jQuery block UI plugin

阻止 UI
$(document).ajaxStart(function() {
  $.blockUI({
    message: '<h4><i class="fa fa-circle-o-notch fa-spin fa-fw"></i> loading...</h4>'
  })
}).ajaxStop($.unblockUI);

有时,当代码抛出一些错误时:

冻结屏幕上的加载消息没有消失:

原因是:

  1. ajaxStart() 启动时,将调用 $.blockUI()

  2. ajaxStart()成功执行之前,它遇到了一个错误。

  3. ajaxStop() 永远不会到达并且 UI 永远不会畅通 ($.unblockUI)

所以,我正在寻找一种在 ajaxStart()ajaxStop() 之间出现错误时显示一些自定义消息的方法。在 javascript 错误上代替代码 pausing/freezing。

此外,当我尝试 时,它不会取消冻结屏幕。

$(document).ajaxStart(function() {
  $.blockUI({
    message: '<h4><i class="fa fa-circle-o-notch fa-spin fa-fw"></i> loading...</h4>'
  })
  throw Error;
  debugger;
}).ajaxStop($.unblockUI).ajaxError($.unblockUI);

没有道理吗?

您是否尝试过使用 ajaxError() 处理错误

参见:https://api.jquery.com/ajaxError/

$(document).ajaxError(function() {
   $.unblockUI();
   // Display error message here
   alert('Some error message');
}); 
$(document).ajaxStop(function() {$.unblockUI();});
$(document).ajaxStart(function() {
  $.blockUI({
    message: '<h4><i class="fa fa-circle-o-notch fa-spin fa-fw"></i>loading...</h4>'
  })
});

您还可以获取错误消息。有关详细信息,请参阅文档。

$(document).ajaxError(function( event, jqxhr, settings, thrownError ) {

   $.unblockUI();
   console.log(event, jqxhr, settings, thrownError);
});