Je suis passé par beaucoup de messages. Certains disent qu’après jquery 1.8, il est déconseillé. Pour certains, cela fonctionne toujours. Comment puis-je implémenter ceci
$.ajaxSetup({async:false}); duration_reco = $.ajax({ url : newurl, async : false, dataType : 'json', }); console.log(duration_reco.responseText);
Cela dit durtaion_reco est indéfini. J’ai vérifié pour voir que dure_reco cotaines données valides. la demande ajax s’exécute de manière synchrone.
$.ajax
supporte de nombreux types de requêtes (que jQuery appelle des transports ) et les cache à l’utilisateur (XHR normal, XHR avec CORS, JSONP). C’est bien car cela signifie que vous pouvez déclencher n’importe quelle URL à $.ajax()
sans avoir à vous soucier de ce qui se passe en coulisse.
Cependant, il est mauvais en ce que tous les types de demandes ne supportent pas toutes les options $.ajax()
. Les choses commencent à échouer, apparemment au hasard, lorsque cela se produit. C’est ce qui se passe ici.
Puisque vous demandez une ressource à partir d’un autre domaine, $.ajax()
est en train de faire une requête JSONP. Pour comprendre le fonctionnement de JSONP, voir Quelqu’un peut-il expliquer ce qu’est JSONP en termes simples? .
Fondamentalement, les demandes JSONP ne peuvent pas être synchronisées. Vous ne pouvez les exécuter que de manière asynchrone, ce qui implique de modifier votre code en;
duration_reco = $.ajax({ url : newurl, dataType : 'json' }).done(function (obj) { console.log(obj); });
Les requêtes AJAX synchrones sont quand même mauvaises . Ils bloquent le navigateur. Il n’y a presque jamais de raison de les utiliser. Evitez-les à tout prix . Je ne saurais trop insister là-dessus.
Vous devez également vous assurer que votre variable newurl
commence par http://
ou https://
; sinon, il sera traité comme un chemin sur votre domaine actuel et http://www.yourdomain.com/gdata.youtube.com/feeds/api...
sera demandé.