【问题标题】:Detect 404 error from included JavaScript file从包含的 JavaScript 文件中检测 404 错误
【发布时间】:2011-07-05 18:14:01
【问题描述】:

我正在使用 JavaScript 进行跨域 JSON(P) 调用,以将 <script> 标记添加到 DOM,并将我希望包含为 src 的 URL 包含在内。正在加载的脚本有一个回调,它在我的页面上调用一个函数,并且我想要的数据作为函数的参数返回。

不过有 2 个问题:

  1. 有时 JSONP 页面会返回 400 或 404 错误。
  2. 可以在同一个页面上多次请求同一个 JSONP 文件(每次返回不同的数据)

所以,我需要检测回调函数何时未被触发(这表明 JSONP 文件返回了错误),但我还需要考虑到同一文件可以被请求两次的事实。本质上,我需要检测加载页面时的错误,但我必须在其他文件完成加载之前完成它。是的,文件应该以正确的顺序加载(或返回错误)。

一种(低效)解决方案:

我可以为每个不同的文件加载请求一组不同的函数(例如,callbackFunction0、callbackFunction1 等)。这样,我可以简单地确定其中一个函数何时没有触发,并让我的 JavaScript 采取行动。但是,这会占用大量空间并且效率低下,因为我必须有一个 callbackFunction 才能在同一页面上加载脚本的最长时间(不过,这个数字没有确定的值,所以如果我只做了 15函数和脚本被请求 20 次,会出现错误)。

这有点难以解释,但希望你明白了。谢谢。

【问题讨论】:

    标签: javascript include http-status-code-404 jsonp


    【解决方案1】:

    $.ajax 有很多回调函数供你使用。

    $.ajax({
          url: "test.html?callback=?",
          dataType: "jsonp",
          success: function(data){
            // your logic
          }
          statusCode: {
            404: function() {
              alert('page not found');
            }
          }
    });
    

    【讨论】:

    • 我没有使用 jQuery(很遗憾)。另外,这是否适用于跨域?
    【解决方案2】:

    您可以在回调函数中添加一个参数,其中包含脚本的 id/number/position。所以类似于 callbackFunction(1, ...rest of arguments..)。无需创建新的函数名。

    您可以通过将 onerror 事件附加到脚本元素来检测错误。 有点相关:How to trigger script.onerror in Internet Explorer?

    【讨论】:

      【解决方案3】:

      为了解决这个问题,我让回调包含一个包含请求号的变量。所以回调可能是var requestnumber=0;callbackFunction。然后我可以弄清楚哪个请求适用于哪个元素。我早该想到这一点的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 1970-01-01
        • 2012-01-20
        • 2022-11-11
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多