从包含的JavaScript文件中检测404错误

时间:2011-07-05 18:14:01

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

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

但有两次捕获:

  1. 有时JSONP页面会返回400或404错误。
  2. 可以在同一页面上多次请求相同的JSONP文件(每次返回不同的数据)
  3. 因此,我需要检测何时未触发回调函数(这表明JSONP文件返回了错误),但我还需要考虑可以请求两次相同文件的事实。本质上,我需要检测加载页面时的错误,但我必须在其他文件完成加载之前执行此操作。是的,文件应该以正确的顺序加载(或返回错误)。

    一个(低效)解决方案:

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

    这很难解释,但希望你明白了。感谢。

3 个答案:

答案 0 :(得分:2)

$.ajax有许多可以使用的回调函数。

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

答案 1 :(得分:1)

你可以在回调函数中添加一个参数,其中包含脚本的id / number / position。所以像callbackFunction(1,......其余的参数......)。无需创建新的函数名称。

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

答案 2 :(得分:0)

为了解决这个问题,我使回调包含一个包含请求号的变量。所以回调可能是var requestnumber=0;callbackFunction。然后我可以找出应用于哪个元素的请求。我以前应该想到这个。