/ / jQuery requêtes ajax interdomaines - IE8 et IE9 - API YouTube v3 - jsonp uniquement? - jquery, ajax, internet-explorer-8, youtube-api, interdomaine

Demandes ajax jQuery interdomaines - IE8 et IE9 - API YouTube v3 - jsonp uniquement? - jquery, ajax, internet-explorer-8, youtube-api, interdomaine

Je viens de re-factoriser un tas de code pour se connecter àl’API YouTube version 3 pour découvrir qu’aucun de mes appels ajax ne fonctionnait sur IE8 et IE9. Cela tenait à la manière dont ces versions d’IE font des requêtes ajax entre domaines (elles utilisent MS XDomainRequest, qui n’est pas prise en charge dans jquery).

Mon ancien code faisait des requêtes jsonp et cela fonctionnait sur IE8 et IE9. Mon nouveau code faisait des requêtes json régulières, par exemple: $.ajax({dataType:"json", ...}) au lieu. Je ne savais pas que cela ne fonctionnerait pas dans IE8 et IE9.

Un des inconvénients de faire des demandes JSONP est que vousne peut pas capturer les délais d'attente via le rappel d'erreur de la demande ajax car le serveur ne répond jamais, ce qui signifie que votre rappel ne sera jamais appelé. La façon dont je gère cela est (est-il une meilleure façon ??):

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));
}
});

Ma question est: est-ce le meilleur moyen de faire des appels dans l'API YouTube v3 à l'aide de jquery et ajax?

Réponses:

1 pour la réponse № 1

L'API de données YouTube v3 vous oblige à effectuer GETdemandes utilisant HTTPS. Cela ne fonctionnera pas du tout avec les requêtes HTTP. Si la page à partir de laquelle vous faites la demande GET utilise HTTP, une implémentation XDomainRequest ne fonctionnera pas. XDomainRequest nécessite une correspondance entre les protocoles. Il est donc inutile de tenter de l'implémenter à moins que vos pages ne soient servies à partir de HTTPS.


0 pour la réponse № 2

Je ne vois pas pourquoi vous ne pouvez pas utiliser XDomainRequest dansce cas. Soit vous oubliez jQuery lors des requêtes ajax d’origine croisée dans IE9 et IE8 (et utilisez directement XDomainRequest), soit vous utilisez un wrapper XDomainRequest pour jQuery, tel que https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest. Pas besoin d'utiliser JSONP ici.

Notez que si un XDomainRequest échoue, aucune raison ne sera fournie. La fonction de rappel onerror ne prend pas / aucun paramètre n’est passé.