【发布时间】:2014-05-31 20:30:07
【问题描述】:
我刚刚重构了一堆代码以连接到 YouTube API 版本 3,发现我的 ajax 调用都没有在 IE8 和 IE9 上运行。这与这些版本的 IE 如何进行跨域 ajax 请求有关(它们使用 MS XDomainRequest,jquery 不支持)。
我的旧代码发出 jsonp 请求,它适用于 IE8 和 IE9。我的新代码正在发出常规的 json 请求,例如:$.ajax({dataType:'json', ...})。我没有意识到这在 IE8 和 IE9 中不起作用。
发出 jsonp 请求的一个缺点是您无法通过 ajax 请求的错误回调捕获超时,因为服务器永远不会响应,这意味着您的回调永远不会被调用。我的处理方式是(有更好的方法吗??):
var timer = setTimeout(function () {
// a timeout occurred after 30 seconds
}, 30000);
$.ajax({
url: url + 'https://www.googleapis.com/youtube/v3/... &callback=?',
type: 'get',
dataType: 'jsonp',
success: function (json) {
clearTimeout(timer);
// success!
},
error: function (xhr) {
clearTimeout(timer);
o.fnError(getAjaxError(xhr));
}
});
我的问题是:这是使用 jquery 和 ajax 调用 YouTube API v3 的最佳方式吗?
【问题讨论】:
标签: jquery ajax internet-explorer-8 youtube-api cross-domain