jquery ajax crossdomain -> error handling -> delete script
bonjour à tous,
(hey oui, même moi je peux avoir besoin d'aide ! :D )
je développe un site en local sur mon pc qui exécute de temps à autre des appels sur ma base de données en ligne qui renvoit des scripts au format JS. comme cela est considéré comme du cross-domain, j'utilise la fonction "ajax" de jquery qui n'effectue pas un appel "ajax" au sens traditionnel du terme mais qui crée simplement un object <script> en l'attachant au head html de ma page.
bref, le problème étant que je voudrais gérer les erreurs lors du chargements. il existe bien les options "error" et "succes" dans la fonction "ajax" de jQuery mais avec mes testes, ça ne semble pas fonctionner.(ne voulant pas admettre que j'ai pu faire une erreur, je présume que ces optinos ne sont valables que pour les appels ajax conventionnels : xhr).
j'essaie donc de résoudre mon problème à l'aide de timer(setTimeout) que j'annule en cas de succès avec l'option "complete" (qui correspond, il me semble, au "onload" du script).
du genre :
Code:
1 2 3 4 5 6 7 8
| window.timerBadReponse = setTimeout("alert('réponse erronée')",4000);
var timerNoReponse = setTimeout("alert('réponse trop tardive');clearTimeout(timerBadReponse )",3000);
$.ajax({
type: "GET",
url: url,
dataType: "script",
complete: function(){clearTimeout(timerNoReponse );}
}); |
et dans mon fichier js venant de mon serveur, j'annule le cas de "bad réponse" (en cas de page 404 ou d'erreur sql/php par exemple).
Code:
1 2
| clearTimeout(timerBadReponse );
//... reste du code |
mon problème étant, je voudrais pouvoir "annuler" le chargement de mon script une fois le délai dépassé (3sec dans mon exemple) .. je me dis qu'en js "normal" je n'aurai qu'a faire un "removeChild" de mon script(à condition qu'il soit bien considéré comme "attaché" au head même si son "onload" n'est pas terminé.). donc je voudrais savoir s'il était possible de récupérer mon "élement" script depuis jQuery ... ou si j'avais plutôt intérêt à tout recoder en JS traditionnel ? ou si vous avez une autre solution à proposer ?
merci d'avance pour vos nombreuses de réponses. :D