当[脚本]文件下载失败时,我该怎么说?

时间:2010-06-11 18:22:47

标签: javascript dom networking

我的网络应用程序向我发送了浏览器javascript的诊断信息,告诉我我注入的[script]标签无法下载相关的.js文件。我不能在本地重现这个,并且没有特定模式的文件失败,或浏览器类型是什么。请求的地理位置有一个模式 - 墨西哥和巴西总是更频繁 - 所以我猜测,一般来说,互联网可能只是更加不稳定,而只是导致失败的网络问题。

但是,我真的很想知道。是否有任何方法可以从浏览器javascript确定是否由于服务器返回错误,网络错误或协议超时而发生故障?我不在乎该机制是否特定于浏览器,因为看起来同样的问题可能导致所有浏览器类型的错误。

3 个答案:

答案 0 :(得分:1)

我对此表示怀疑:<script>标记可能会像图片一样发生onerror事件,但我怀疑您是否会从中获取任何详细信息。

我在JavaScript中唯一知道的就是提供详细的错误信息,比如你正在寻找的是Ajax。在Ajax中,您可以捕获超时以及服务器响应代码。

当“正常”包含失败时,您可以尝试向脚本文件发出Ajax请求,并分析该错误请求。但是,我不完全确定这是否会有所帮助:可能是<script>部分失败,但Ajax调用加载得很好,因为失败的性质很少。

第二个选项 - 我不知道是否有一个稳定的实现 - 实际上是使用Ajax加载脚本,并将其注入文档。我确信一些生病创意大脑已经涉及到这个问题:)这将使您有机会分析任何失败(例如,进行另一次Ajax调用,发送诊断信息)。

最后一点,请查看服务器的错误日志,了解任何异常情况。

答案 1 :(得分:1)

首先,作为ISP行业的资深人士,我可以告诉你,美国南部的通信基础设施迅速恶化;考虑一下,它主要是拥有古老铜缆长途电话网络的第三世界国家。

  

服务器返回的错误

使用服务器日志来检测这些!您不应该向客户端(浏览器)询问您应该已经知道答案的内容。

  

来自网络错误,还是来自协议超时?

由于网络错误相当广泛(例如协议超时 网络错误),我将解决这个问题,不会,除非你使用某些AJAX,否则无法调试这些错误。 jQuery有一个专门用于此任务的jQuery.getScript(),但它可能不会为您提供所需的选项,因此您需要采用jQuery.getScript()的jQuery.ajax()示例实现,然后实现error()方法,您可以在其中查看XHR以查看失败原因。当然,对于所有这些,jQuery不是必需的,它只是让它变得更容易。

答案 2 :(得分:0)

<script>标记有onerror,但正如Pekka所说,它可能无法提供任何有用的反馈。这里有一段代码片段,以防万一您想要进一步探索的内容:

var url = 'test.js';
document.write('<script src="'+url+'" type="text/javascript" charset="utf-8" onerror="throw(\'An error occured: \' + this.src)"><\/script>');