我正在尝试使用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();});
}
答案 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
的包装器。)
如果你需要一个故障回调,你可能需要自己编程,可能是基于一个两秒计时器,或类似的东西。