0

JqG​​rid 4.4.5 使用远程 json 数据填充。jqGrid loadError 方法定义为

loadError: function LoadErrorHandler(jqXHR, textStatus, errorThrown) {
  alert('Load error ' + JSON.stringify(jqXHR) + '\n status ' + textStatus +
                  '\n error ' + errorThrown);
  }

如果快速按下页面中的浏览器刷新按钮或在方法中定义的 Chrome 模式警报框中按住 F5 键,则会出现。

如何在 Chrome 中禁用此警报框?是否可以检测该页面处于重新加载状态而不显示此框或其他想法?

在 FireFox 警告框仅闪烁,在 IE 10 中不会出现。看起来这只是 Chrome 中的问题。

在这种情况下,传递的参数值是:

jqXHR: {"readyState":0,"responseText":"","status":0,"statusText":"error"} 
textStatus:  error 
4

1 回答 1

0

对于无法清晰复制的案例,很难写出建议。

可能您使用虚拟滚动并且仅在案例中存在一些效果?如果是这样,您可以尝试在不使用scroll: 1or的情况下重复相同的测试scroll: true

另一个原因可能是某些 Web 浏览器调用abortjqXHR. 我建议您使用不同版本的 jQuery 测试代码。大多数情况下有textStatus === "abort"errorThrown === "abort"(见答案),但它可能是不同版本的 jQuery 的差异。我建议你在里面设置断点loadError并检查谁调用它以及 jQuery 是否真的中止了。

该值jqXHR.status === 0可能有另一个原因。对应于XMLHttpRequest规范,此类错误将在网络错误时发生。在旧版本的 jQuery 中(见我的旧答案)有一个错误,网络错误被解释为“成功”。jQuery 的更高版本修复了该错误,并且在网络错误的情况下将调用回调error(等等)。loadError在分析了您拥有的不同案例之后,您可以考虑修改loadError您使用的实现。例如,您应该包括其他条件,例如

loadError: function (jqXHR, textStatus, errorThrown) {
    if (textStatus !== "abort" && errorThrown !== "abort") {
        // display alert
    }
}

甚至额外测试案例jqXHR.status === 0jqXHR.readyState === 0(也见这里)。无论如何,我建议您在一个特定版本的 jQuery 中仔细测试案例。

于 2013-05-05T17:11:41.440 回答