代码之家  ›  专栏  ›  技术社区  ›  Bruce

当[script]文件下载失败时,我如何知道原因?

  •  0
  • Bruce  · 技术社区  · 14 年前

    我的Web应用程序从浏览器javascript向我发送诊断信息,告诉我注入的[script]标记未能下载相关的.js文件。我不能在本地复制这个,也没有特定的模式,文件会失败,或者浏览器类型是什么。请求的地理位置有一种模式——墨西哥和巴西总是更频繁——所以我猜测,也许互联网在那里更脆弱,而这只是导致失败的网络问题。

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

    3 回复  |  直到 14 年前
        1
  •  1
  •   Pekka    14 年前

    我怀疑: <script> 标签可能有一个 onerror 像图片一样的事件,但我怀疑你会从中得到任何详细的信息。

    我在javascript中知道的唯一一件事情就是Ajax,它提供了详细的错误信息,就像您正在寻找的一样。在Ajax中,您可以捕获超时和服务器响应代码。

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

    第二个选项——我不知道是否有一个稳定的实现——实际上是使用Ajax加载脚本,并将其注入到文档中。我肯定一些 生病的 创造性思维已经在某个地方对此有所涉猎了:)这将给您分析任何故障的机会(例如,再次调用Ajax,发送诊断信息)。

    最后,查看服务器的错误日志中是否有任何异常情况。

        2
  •  1
  •   ken    14 年前

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

    服务器返回错误

    使用服务器日志检测这些!你不需要问客户(浏览器)一些你应该已经知道答案的事情。

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

    因为网络错误非常广泛(例如协议超时 一个网络错误),我将解决这个问题,不,除非您使用一些Ajax,否则无法调试这些问题。jQuery有一个 jQuery.getScript() 特别是对于这个任务,但是它可能不会提供您需要的选项,所以您需要以jquery.ajax()为例来实现jquery.getscript(),然后实现error()方法,在这里您可以查看XHR以了解失败的原因。当然jquery不是 必修的 对于所有这些,它只是让事情变得简单多了。

        3
  •  0
  •   donohoe    14 年前

    这个 <script> 标签有 onerror 但正如佩卡之前所说,它可能不会提供任何有用的反馈。这里有一个代码片段,以防您想进一步了解它:

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