IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

jquery ajax crossdomain -> error handling -> delete script


Sujet :

JavaScript

  1. #1
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut jquery ajax crossdomain -> error handling -> delete script
    bonjour à tous,

    (hey oui, même moi je peux avoir besoin d'aide ! )


    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 js : Sélectionner tout - Visualiser dans une fenêtre à part
    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 js : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    T'as regardé du côté de jQuery 1.5 ?

    http://www.developpez.net/forums/d10...s-asynchrones/

    Avec le nouveau module Ajax, tu vas créer un objet Deferred, Ce qui te permet, en parallèle d'avoir un timer qui lui déclenchera le "fail" de l'appel asynchrone et du coup l'annulation du chargement. Puisqu'une fois que l'objet Deferred dans le statut soit réussi, soit échoué ne peux plus changer d'état et tout retour en force d'un résultat sera bêtement ignoré.

    A mon avis, c'est sur cette piste que tu dois travailler.

  3. #3
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par gwinyam Voir le message
    T'as regardé du côté de jQuery 1.5 ?

    http://www.developpez.net/forums/d10...s-asynchrones/

    Avec le nouveau module Ajax, tu vas créer un objet Deferred, Ce qui te permet, en parallèle d'avoir un timer qui lui déclenchera le "fail" de l'appel asynchrone et du coup l'annulation du chargement. Puisqu'une fois que l'objet Deferred dans le statut soit réussi, soit échoué ne peux plus changer d'état et tout retour en force d'un résultat sera bêtement ignoré.

    A mon avis, c'est sur cette piste que tu dois travailler.
    je ne connaissais pas et à mon avis la réponse est là, je vais regarder. merci.

Discussions similaires

  1. [JQuery] ajax avec Firefox
    Par elvan49 dans le forum jQuery
    Réponses: 2
    Dernier message: 17/12/2007, 12h21
  2. jquery ajax et IE
    Par Sourrisseau dans le forum jQuery
    Réponses: 1
    Dernier message: 01/09/2007, 05h17
  3. Internal Compiler Error sur instruction 'delete'
    Par femtosa dans le forum C++
    Réponses: 4
    Dernier message: 11/08/2007, 11h33
  4. [JQuery] Ajax et réécriture d'url
    Par Nicolas N. dans le forum jQuery
    Réponses: 1
    Dernier message: 21/07/2007, 20h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo