JQuery's La fonction ne semble pas prendre en charge une fonction de rappel d'erreur. Je ne peux pas utiliser le code de traitement des erreurs d'ajax global ici, une fonction d'erreur locale serait idéale. p>
Documentation selon laquelle le rappel obtient des données / textestatus semble incorrect - le rappel ne devient ni. p>
Toute suggestion sur la manière dont je détecte qu'un appel à obuit a échoué (serveur non disponible, par exemple)? P>
Edit: Il suffit de regarder la source, et il semble que le rappel soit uniquement invoqué sur le succès, avec des données toujours définies sur NULL et TEXTStatus non définies (puisque c'est un rappel, je suppose que). La documentation est très incorrecte pour cette fonction. P>
6 Réponses :
Ceci est un peu de hack, mais ...
Vous pouvez déclarer une variable à l'intérieur des scripts que vous chargez et vérifiez-la après avoir chargé un script (en supposant que la fonction complète incendie): < /p >p>script_test.js: xxx x/pre> et alors: p> ou vous pouvez simplement essayer de voir Si ce qui est dans votre script, il existe réellement - fonctions, variables, objets, etc.
Main_script.js: P > script_test.js: p>
Une manière plus générique de faire cela ajouterait une fonction d'auto-exécution à l'intérieur des scripts que vous souhaitez charger et de les faire exécuter une fonction dans votre script "principal": P>
Oui, c'est ce que je fais actuellement, mais comme vous l'avez dit, c'est un peu de hack. BTW, le code doit lire si (type de script_test! == "indéfini") ... code>
Aye, c'est un hack. Avez-vous considéré mon 2e exemple? Et .. Je ne crois pas que vous ayez besoin du type d'opérateur.
Merci pour cette deuxième suggestion. De plus, à moins que je ne sois vraiment pas fou, vous aurez besoin du type def si le Var n'est pas déjà défini. Essayez d'exécuter cette fonction ci-dessous dans votre script (ne faites aucune mention de FOO avant). Vous remarquerez une erreur dans la console JS: Test de fonction () {Si (FOO === non défini) alerte ("YAY!"); }
Le Global JQuery Ajax-Errorhandler fonctionnera!
Avant la configuration de $ .Getscript-appelez le gestionnaire d'erreur pour cacher l'erreur. p> comme décrit dans Le manuel de JQuery: http://api.jquerery.com/ajaxError/ . P> p>
AS de JQuery 1.5, vous pouvez ajouter un .FAIL à votre appel à votre appel à obents. http://api.jquerery.com/jquery.getscript/#handling-errors p> p>
Le rappel code> échoue code> ne semble pas fonctionner si le script est une URL de cross-domain (non plus le rappel code> code> ou le gestionnaire global ajaxError code> gestionnaire .
L'échec code> Callback fonctionne avec les URL de domaine croisé dans JQuery 2.0+
Pour les étiquettes de script croisés, les incendies d'événement de réussite, mais l'événement d'erreur ne le fait pas; Peu importe la syntaxe que vous utilisez. Vous pouvez essayer cette approche:
manipulée = fenêtre.settimeout code> li>
- à l'intérieur de votre fonction de rappel de réussite, annulez le délai d'attente à l'aide de
window.cleartimeout (poignée) code> li>
ol> échantillon code: p> xxx pré> p>
Au début, cela semble être une solution tout à fait laide, mais c'est le seul qui fonctionne réellement avec des adblockers. Alors merci pour ça!
J'aimerais savoir si cela a jamais été adressé dans une version plus récente de JQuery. Je remarque cela et j'utilise jQuery 1.8.3. Cependant, je remarque que ni le rappel n'est appelé. Le service JSPON que j'utilise renvoie une en-tête 400 dans ce cas. De toute façon, je ne trouve de toute façon pas y faire face au client lorsque j'utilise JQuery.
@Anthony: JQuery 2.x prend en charge les gestionnaires d'erreur maintenant (1.x pas)
jquery.ajax a une solution alternative de gérer l'erreur
Solution élégante :). Préféré que ce qui précède, même si la solution précédente est signalée dans la documentation officielle API.JQUERY.com/JQUERY.GETScript dans la section Erreurs de manutention.
Sauf si vous n'utilisez pas JQuery 2.0+ $. Gélects code> semble être le mauvais choix, car il ne fournit aucune capacité de traitement des erreurs tout en faisant des demandes de domaine croisées. Aucun de ceux:
échoue code>,
complète code>,
erreur code>,
StatusCode code> fonctionnera. Je l'ai vérifié avec jQuery 1.11.2
Solution avec Settimeout code> sera trop lente si vous devez charger le script de repli lorsque le premier échouera.
Dans ce cas, script.onerror code> Le rappel semble être le moyen le plus propre.
var libLoaded = $.Deferred();
var script = document.createElement('script');
document.head.appendChild(script);
script.onload = libLoaded.resolve;
script.onerror = function () {
// load fallback script, no error handling
$.getScript('/fallbackLib.js')
.done(libLoaded.resolve)
};
script.src = 'https://example.com/lib.js';
$.when(libLoaded).then(
// fanally I can use my lib safly
);