我只是重新考慮了一堆連接到YouTube API版本3的代碼,以發現我的ajax調用沒有在IE8和IE9上工作。這與IE的這些版本如何跨域ajax請求(他們使用MS XDomainRequest,這在jquery中不支持)有關。jquery跨域ajax請求 - IE8和IE9 - YouTube API v3 - 僅限jsonp?
我的舊代碼正在發出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的最佳方式?
我不想讓XDomainRequests沿着我的jquery ajax請求。我試過這個庫,但它不起作用 - 不知道爲什麼,但它確實要求服務器發回一個Access-Control-Allow-Origin頭。也許youtube沒有返回該標題。 – Redtopia
如果您不想直接使用XDomainRequest並且/或者您無法使其工作,那麼您唯一的選擇就是JSONP(假設它受YouTube API支持)。 –
這就是我所害怕的,但我想聽聽一些使用jQuery Ajax集成了youtube api v3的人。 – Redtopia