$ .getJSON .always()方法不会在HTTP错误上执行

时间:2013-05-25 18:18:50

标签: javascript jquery error-handling getjson

我正在尝试使用getJson检索一些谷歌日历信息。在某些情况下,我正在尝试检索的日历可能或可能不可用,我将获得GET HTTP错误403或404,其他时候GET将成功。我的问题是即使在GET无法接收数据的情况下我也需要执行一些代码。我认为使用.always方法会执行此代码,但事实证明它在403或404发生时不会执行。我也尝试使用.fail方法专门针对这种情况,没有成功。有什么想法吗?

添加代码:

function AcquireGroupFeed(GroupDataBase) {

  // For each group the calendar information is aquired and, if the events are 
  // relevant they are added to the feed. 

  // The group's calendar URL
  var  CalUrl = "http://www.google.com/calendar/feeds/" + GroupDataBase.calendarid + 
        "/public/full?alt=json-in-script&callback=?";

  // Acquiring the data from Google.        
  $.getJSON(CalUrl, function(data) {PushToEventFeed(data, GroupDataBase);})
            .always(function(){CheckAllGroupsAcquired();});

}

2 个答案:

答案 0 :(得分:1)

我最近了解到,通过使用$ .ajax调用而不是.getJSON,我可以在无法检索URL时处理错误。应该为要处理的错误定义超时设置:

$.ajax({
        url: URL,
        dataType: 'json',
        timeout: 3000,
        success: function( data ) { successFunction();},
        error: function( data ) { errorHandling(); }
      });

有了这个,我就能解决我的问题了。

答案 1 :(得分:0)

您实际上正在执行JSONP请求,因为托管页面的域与AJAX请求中的域不同。 JSONP不能通过使用普通的XMLHTTPRequest接口(它使用script元素)来运行,并且它不支持故障回调。

如果您查看$.ajax功能的error选项,您会看到以下注释:

  

不会为跨域脚本和跨域JSONP请求调用此处理程序

同样适用于$.getJSON(因为它是$.ajax的包装器。)

如果你需要一个故障回调,你可能需要自己编程,可能是基于一个两秒计时器,或类似的东西。