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 :

[AJAX] Emplacement du script


Sujet :

JavaScript

  1. #1
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut [AJAX] Emplacement du script
    Bonjour,

    Je suis en train de développer un site utilisant Ajax pour recharger seulement le contenu de la page quand l'utilisateur change de page.
    Sur certaines de ces pages, je veux utiliser du javascript, mais il semblerait que je ne peux le faire que si le script a été mis dans les balises head.

    Cela ne m'arrange pas, car je voudrais que le javascript soit généré en fonction de la requête, mais les balises ne sont jamais rechargées, seul le contenu l'est.

    Quelqu'un a-t-il une explication et/ou solution ?

    Merci de votre aide

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 437
    Points
    3 437
    Par défaut
    Salut,

    La solution est d'utiliser la fonction eval de JavaScript.

    Ton problème est que le browser charge les scripts qui lui sont immediatement accessibles; ceux qui sont chargés de manière asynchrones ne sont pas chargés à nouveau; tu dois donc explicitement les "évaluer" avec la commande eval

    A+

  3. #3
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Merci pour ta réponse.

    J'ai essayé, je suis plus près de la solution mais ça ne marche encore pas.

    J'ai ajouté un appel Ajax qui récupère le code javascript et je le passe à la fonction eval. Celui-ci est bien évalué (vérifié avec des alert()). Mais lorsque dans la page que j'ai chargée, je fais appel à une fonction définie dans le script ainsi évalué, cela ne marche pas. Un alert à l'entrée de la fonction n'est pas évalué.

    Je suis sûr du code évalué, je l'ai testé à part dans le même contexte d'utilisation.

    Ai-je oublié quelque chose ? Peut-être voulez-vous un peu de code pour y voir clair ?

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 437
    Points
    3 437
    Par défaut
    Quel message d'erreur as-tu lorsque tu fais appel à ces nouvelles fonctions ?

  5. #5
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Le message est "Objet attendu".
    C'est ligne 1 car 1 d'après le débuggeur de IE, mais comme c'est du code évalué, à mon avis c'est faux.

    Voici le code de la fonction appelée au moment de l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function deroule(id)
    {
        if(etats[id] == 0){
            document.getElementById('conv'+id).innerHTML = convs[id];
            etats[id] = 1;
        } else {
            document.getElementById('conv'+id).innerHTML = resumes[id];
            etats[id] = 0;
        }
    }
    Toutes les variables et id utilisés sont correctement définis et bien nommés dans le code. La ligne 1 du code évalué est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var convs = new Array();
    Je ne pense pas que ce soit une erreur de code, car il marche quand je l'essaie dans une page à part où tout est synchrone.

  6. #6
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Il me semble que la question a déja été abordée dans le forum... .. .

    @ tchaOo°

  7. #7
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Oui, j'ai vu ce thread, mais il n'a pas été résolu. Il y a une autre solution qui est proposée, mais je n'ai pas vraiment compris en quoi elle consistait.

    Après un peu de recherche, il semblerait que le code ne marche pas car les éléments créés par le code évalué dynamiquement ne sont atteignables que dans le script qui a fait l'évaluation. Du coup, je ne peux pas appeler la fonction depuis le javascript.

    Si quelqu'un a quelques éléments de réponse à m'apporter...

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 437
    Points
    3 437
    Par défaut
    Tu peux créer un objet "global" à ta page dès le début.

    Ensuite, pour toutes tes nouvelles fonctions, tu les associerais à cet objet; Ainsi, elles seront visible de partout, vu que l'objet lui même était visible dès le départ.

    Qu'en penses-tu ?

  9. #9
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Ouep, bonne idée.

    Je fais rarement du javascript, et j'avais oublié que les fonctions pouvaient se manipuler aussi facilement.

    Je l'ai essayée, et apparemment ça marche très bien.
    Merci beaucoup !

  10. #10
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Aux futurs lecteurs :

    es éléments créés par le code évalué dynamiquement ne sont atteignables que dans le script qui a fait l'évaluation
    En fait, ceci n'est pas tout à fait vrai. Ils ne sont atteignables qu'avec la même portée de l'instruction eval(). En clair, si l'instruction eval est effectuée dans une fonction, les éléments du code dynamique ne restent valables que dans cette fonction. Ils faut donc les conserver dans des variables globales pour les utiliser ailleurs.

    Hope this helps.

  11. #11
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 437
    Points
    3 437
    Par défaut
    Tu dois pouvoir aussi ajouter des scripts dynamiquement à ta page en jouant avec l'arborescence DOM

  12. #12
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Ouep, je crois que c'est ce que fait la solution proposée dans l'autre post à ce sujet.

    Mais la discussion n'a pas été assez loin pour dire si ça marche, et ça avait l'air assez compliqué : je ne comprenais pas la moitié des lignes de code proposées
    C'est peut-être parce que je n'ai jamais fait ce genre de manip.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Ajax] lancer un script php en php (4.x)
    Par zan001 dans le forum Langage
    Réponses: 1
    Dernier message: 08/11/2006, 12h49
  2. [AJAX] Appel de script erronné
    Par ryojii dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/10/2006, 15h48
  3. [AJAX] forcer un script ajax à ne pas regarder dans le cache
    Par grinder59 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/07/2006, 17h33
  4. [AJAX] JS ou AJAX pour ce script?
    Par kenny49 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/07/2006, 14h17
  5. [AJAX] sql +java script dans xhtml
    Par 18Marie dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/06/2006, 19h15

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