Ajax Uncaught SyntaxError: Jeton inattendu «pour»

var dropdownsInsurance = ["home", "claims", "contact"]; $.when( for (var i = 0; i < dropdownsInsurance.length; i++) { $.get(dropdownsInsurance[i] + ".svg", function(svg) { $("#" + dropdownsInsurance[i]).append(svg.documentElement); }); } ).then(init); function init() { alert("svgs have been loaded!"); } 
 .navLinkContainer { margin-top: 10px; width: 25%; } svg { padding: 0; margin: 0; width: 100%; display:block; } 
         

Je ne sais pas comment faire une boucle for dans un appel $ .when jquery ajax. Il n’attend pas le “pour”. Voici un lien de plunker qui permet de tirer les svgs externes à l’intérieur. https://plnkr.co/edit/HEcvX7N7Ih29tCNPatw1?p=preview Quoi qu’il en soit, même problème. Comment puis-je faire cela?

Je suppose que vous voulez que votre fonction init exécutée une fois tous les appels $.get terminés. Pour ce faire, vous devez passer chaque promesse retournée de $.get à $.when $.get en tant que paramètre. En outre, vous ne pouvez pas simplement insérer une boucle for dans un appel de fonction de ce type et vous attendre à ce qu’il fonctionne.

Vous devez construire un tableau de promesses, puis utilisez .apply() pour les envoyer à $.when .

 var dropdownsInsurance = ["home", "claims", "contact"]; // Array to hold promises from `$.get` calls var svg_promises = []; function init(){ alert("svgs have been loaded!"); } // Closure to capture each value of `i`. // Otherwise, `i` will be the same value // at the end of the loop, because the callbacks // will run after the `for` is done and will use // that value of `i`. function svg_callback(i){ return function(svg){ $("#" + dropdownsInsurance[i]).append(svg.documentElement); }; } for(var i = 0; i < dropdownsInsurance.length; i++){ // Add each promise to the array svg_promises.push($.get(dropdownsInsurance[i] + ".svg", svg_callback(i))); } // Call `$.when` with all the promises $.when.apply($, svg_promises).then(init); 

DOCS:

Function.prototype.apply : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

$.when : http://api.jquery.com/jQuery.when/

$ .when () est une pseudo-promesse proposée par jQuery, qui accepte les objects différés ou différés, tels que les fonctions ou les objects contenant des données.

https://api.jquery.com/jquery.when/

Ce qui est vraiment pratique, c’est qu’il peut accepter et un ensemble de fonctions à exécuter, et que tout se fera de manière synchrone pour vous.

  // Your original array var dropdownsInsurance = ["home", "claims", "contact"]; // Made an array to collect functions into var applyList = []; // Use your for-loop outside of your pomise chain, and build an array of functions for (var i = 0; i < dropdownsInsurance.length; i++) { // Add an array item applyList.push( function () { // In order to combat race condition in your array keys, affect your array directly // Do this by shifting off each one until you have them all moved into your function list // You may need to clone your original as you're changing it by using this var workOn = dropdownsInsurance.shift(); // Go do your ajax and respond accordingly $.get(workOn + ".svg", function(svg) { $("#" + workOn).append(svg.documentElement); }); }) } // Create a "promise" chain $.when() // Ask your chain to apply all in your array .always(applyList) // Run your init function .then(init) // Make your alert - tada function init() { alert("svgs have been loaded!"); } 

Voici le JS uniquement dans jsFiddle: https://jsfiddle.net/ - vous voudrez peut-être appliquer votre propre code HTML et faire un peu plus de travail pour le faire fonctionner avant d’intégrer votre propre code.