Requêtes synchrones Ajax

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é.