1

我正在尝试使用 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();});

}
4

2 回答 2

1

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

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

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

于 2014-03-09T18:56:17.163 回答
0

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

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

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

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

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

于 2013-05-25T19:36:34.527 回答