Manipulation des erreurs dans jQuery.getScript

La fonction getScript de jQuery ne semble pas supporter une fonction de rappel d'erreur. Je ne peux pas utiliser le code global de gestion d'erreur ajax ici, une fonction d'erreur locale serait idéale.

La documentation selon laquelle le rappel reçoit des données / textStatus semble incorrect – le rappel ne reçoit aucunement.

Des suggestions sur la façon dont je détecte qu'un appel à getScript a échoué (le serveur n'est pas disponible, par exemple)?

EDIT: Il suffit de regarder la source, et il semble que le rappel ne soit invoqué que par succès, les données étant toujours définies sur null et TextStatus non défini (car il s'agit d'un rappel de succès uniquement, je suppose). La documentation est très incorrecte pour cette fonction.

C'est un peu un hack, mais …

Vous pouvez déclarer une variable à l'intérieur des scripts que vous chargez et vérifier après avoir chargé un script (en supposant que la fonction complète soit encore incendiée):

Script_test.js:

var script_test = true; 

Et alors:

 $.getScript("script_test.js", function () { if (typeof script_test !== undefined) alert("script has been loaded!"); }); 

Ou vous pouvez simplement essayer de voir si tout ce qui se trouve dans votre script existe en réalité – fonctions, variables, objets, etc.

Une façon plus générique de le faire serait d'ajouter une fonction d'auto-exécution dans les scripts que vous voulez charger, et de les faire exécuter une fonction dans votre script "principal":

Main_script.js:

 function scriptLoaded(scriptName) { alert(scriptName + " loaded!"); } $.getScript("script_test.js"); 

Script_test.js:

 (function () { scriptLoaded("script_test.js"); })(); 

À partir de jQuery 1.5, vous pouvez ajouter un fichier .fail à votre appel à getScript.

 $.getScript('foo.js', function(){ //script loaded and parsed }).fail(function(){ if(arguments[0].readyState==0){ //script failed to load }else{ //script loaded but failed to parse alert(arguments[2].toString()); } }) 

http://api.jquery.com/jQuery.getScript/#handling-errors

Pour les balises de script de domaine transversal, l'événement de réussite se déclenche, mais l'événement d'erreur ne l'est pas; Quelle que soit la syntaxe que vous utilisez. Vous pouvez essayer cette approche:

  1. Créez un gestionnaire d'erreur et mettez-le sous tension après quelques secondes à l'aide de handle = window.setTimeout
  2. À l'intérieur de votre fonction de rappel de réussite, annulez le délai d'attente à l'aide de window.clearTimeout(handle)

Exemple de code:

 var timeoutId; // timeout id is a global variable timeoutId = window.setTimeout(function() { alert("Error"); }, 5000); $.getScript("http://other-domain.com/script.js", function(){ window.clearTimeout(timeoutId); }); 

Le JQuery Ajax-ErrorHandler mondial fonctionnera!

Avant la configuration $ .getScript-Call, le gestionnaire d'erreurs a caché l'erreur.

 $(document).ajaxError(function(e, xhr, settings, exception) { alert('error in: ' + settings.url + ' \n'+'error:\n' + exception ); }); 

Comme décrit dans le manuel JQuery: http://api.jquery.com/ajaxError/ .

Jquery.ajax a un autre moyen de gérer l'erreur

 jQuery.ajax({ type: "GET", url: 'http://www.example.com/script_test.js', dataType: "script", error: function (XMLHttpRequest, textStatus, errorThrown) { console.log('error ', errorThrown); }, success:function(){ console.log('success'); } });