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] Détecter contenu d'un bloc et le remplir avec autre chose.


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut [AJAX] Détecter contenu d'un bloc et le remplir avec autre chose.
    Bonjour,

    Je vais essayer de détailler mon besoin.

    BESOIN :
    - C'est un problème d'affichage de publicité.
    - La régie A propose un unique code pour afficher les campagnes de tous ses annonceurs (pour un format donné).
    - Quand la régie A n'a plus de campagne à afficher (par exemple si le visiteur à déjà vu 3 page), alors la régie n'affiche plus rien.
    - J'ai aussi une régie B qui fonctionne de la même façon.

    Mon besoin est d'afficher en priorité le code de la régie A et si il n'y a plus de campagne à délivrer, alors afficher la régie B.
    Le problème, c'est que mon seul moyen de savoir que la régie A n'a plus rien à délivrer, c'est de regarder ce que retourne le code.


    SITUATION ACTUELLE :
    Ma régie A est au CPM et la B au click.

    Ce que je faisais, c'est que j'avais créé 3 blocs div.
    Bloc 1 : à l'endroit où doit s'afficher la pub
    Bloc 2 : contenant la pub de la régie A, mais avec le bloc à "display:none"
    Bloc 3 : contenant la pub de la régie B, mais avec le bloc à "display:none"

    Alors au moment de l'affichage, je testais le contenu du bloc 2.
    Si il était non vide alors je modifié le contenu du bloc 1 avec celui du bloc 2.
    sinon, je modifais le contenu du bloc 1 avec celui du bloc 3.

    La conséquence, c'était que les 2 codes étaient toujours présents sur la page, mais ne s'affichait réellement au bon emplacement que celui que je voulais.

    Pour cela, j'utilisais l'id des bloc et les attributs innerHTML

    Mais cette situation actuelle n'est valable que :
    - si on utilise pas d'outils de gestion publicitaire
    - si la regie B n'est pas au CPM aussi, car sinon c'est assimilable à de la fraude, car le code est affiché, la baniere est affichée, mais masquée.


    SITUATION FUTURE :

    - Je ne peux plus me permettre d'avoir les 2 codes des 2 regies affichés (cachés) en même temps sur la page.

    - Je vais utiliser un logiciel de gestion publicitaire.

    Donc maintenant, je vais mettre directement le code de l'utilitaire de gestion publicitaire dans le Bloc 1 (celui où doit se trouver la pub au final)

    Ce code permettra d'afficher la campagne de la regie A.

    Mais si au final l'affichage est vide. Alors je veux que sois affiché et exécuté le code de mon outils de gestion publicitaire qui affichera la régie B

    Je pense que AJAX est la techno qu'il faut pour ca, mais je vois pas du tout comment faire.

    En gros, c'est un peut comme avant, sauf que au lieu de recopier le contenu du bloc 3 dans le Bloc 1, je veux que le contenu du Bloc 1 se rafraichissent en faisant une requete vers le serveur qui le fournira le contenu


    Pour info, le contenu est lui même du javascript.
    Sera t'il exécuté ?

    N'hésitez pas à poser des question. Me dire si je suis pas clair, ...

    Je vous remercie par avance.
    IU

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Salut
    Je crois que ajax peut bien faire l' affaire. Je ne vois pas beaucoup de difference avec ce que tu faisais bien avant. Seulement là, il faut attendre que la page se charge completement pour ensuite verifier le contenu de la div qui reçois la pub. Si elle est vide alors tu charge avec ajax la pub de B.

    Soit, tu crée un div vide. Et lors du chargement de la page (body onload), tu charge avec ajax la pub de la regie A. Si le resultat xhr.responseText est une chaine vide, tu charge maintenant la pub de la regie B.

    Je me pencherais plus sur la deuxieme solution, si je devais le faire. Et je crois que le codage ne sera pas difficile.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Tout d'abord je te remercie pour ta réponse.

    Question :

    Si mon code des regies est

    Régie 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="http://www.regie1.com/pub1.js" /></script>
    Régie 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="http://www.regie2.com/pub2.js" /></script>
    Div devant afficher la pub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="toto">
    <script src="http://www.regie1.com/pub1.js" /></script>
    </div>
    Il me suffit de vérifier si dans le div toto le résultat est vide.
    Ensuite, il me faut charger avec une fonction open un fichier texte qui contient le code de la régie2

    Est ce bien ca ?

    Puis faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    divtoto.innerHTML = xhr.responseText
    Mais alors, à quel moment le javascript de la régie 2 sera interprété ?

    Merci par avance.

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Supposons que tu as deux page php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // regiea.php
    <script src="http://www.regie1.com/pub1.js" /></script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //regieb.php
    <script src="http://www.regie2.com/pub1.js" /></script>
    la page principale sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <html>
    <head>
    <script>
    var xhr = null;
    var fin=false;
    // fin indique si regieb a ete chargée
     
    // Fonction de creation de l'objet XMLHttpRequest function getXhr()
     {
      if(window.XMLHttpRequest) xhr = new XMLHttpRequest(); 
      else if(window.ActiveXObject)
       {  
        try
         {
          xhr = new ActiveXObject("Msxml2.XMLHTTP");
         }
        catch (e)
         {
          xhr = new ActiveXObject("Microsoft.XMLHTTP");
         }
       }
      else 
       { 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest, veuillez le mettre à jour"); 
        xhr = false; 
       } 
     }
    
    // fonction qui charge le contenu dans le div
    
    function ajaxfunc(regie)
     {
      getXhr();
      xhr.onreadystatechange = function()
       {
        if(xhr.readyState == 4 && xhr.status == 200)
         {
                document.getElementById('toto').innerHTML = xhr.responseText;
                // ici...
                if (document.getElementById('toto').innerHTML=="")
                  {
                    if (!fin)
                     {
                       ajaxfunc("regieb.php");
                       fin=true;
                     }
                  }
         }
       }
      xhr.open("POST",regie,true);
      xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      xhr.send("");
     }
    </script>
    </head>
    <body onLoad="ajaxfunc('regiea.php')">
    <div id="toto"></div>
    </body>
    </html>

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    C'est super gentils pour le code.

    Par contre peux tu me dire à quel moment est exécuté / interprété le code javascript de la regieA ?

    Est ce au moment du open ?

    Où est ce au moment de la recopie dans le div par la "fonction" innerHTML ?

    Je demande ca, car je veux savoir si quand la régie regarde l'url où est lancée sa fonction, si elle va voir que son code est exécuté à partir de :
    www.mondomaine.com (en supposant qu'au départ on est la homepage)
    ou
    www.mondomaine.com/regiea.php

    En gros,
    xhr.responseText contient t'il le code exact de regiea.php
    ou il contient déjà le résultat de l'éxécution du code javascript contenu dans regiea.php ?

    Merci par avance.

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    D' abord, il y' avais une erreur dans le code, je viens de le modifier (== au lieu de =).
    xhr.responseText contient t'il le code exact de regiea.php
    ou il contient déjà le résultat de l'éxécution du code javascript contenu dans regiea.php ?
    Comme il s' agit de javaScript, il sera toujours executé sur le poste client. Je vois qu' il y a un autre probleme. C' est que xhr.responseText ne sera pas vide car il contiendra le code du script. J' avais ecris ce code car tu as ecris :
    Alors au moment de l'affichage, je testais le contenu du bloc 2.
    Si il était non vide alors je modifié le contenu du bloc 1 avec celui du bloc 2.
    sinon, je modifais le contenu du bloc 1 avec celui du bloc 3.
    J' ai donc supposé que la xhr.responseText est le resultat du script.

    Pour le dernier point, on indiquera bien le homepage à la regie consernée

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Encore merci pour tes réponses.

    En fait, en voulant faire simple, je t'ai induit en erreur.

    La regie A, quand elle à plus d'annonce à faire passer, elle retourne un texte invisible : "empty" que je recherche avec la fonction indexof

    Sinon, pour en revenir à mon problème pour que le referer soit bien le bon

    Donc si je comprends bien, je code javascript de la régie sera exécuté juste après la copie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                document.getElementById('toto').innerHTML = xhr.responseText;
                // ici...
                if (document.getElementById('toto').innerHTML=="")
    Comme tu me l'avais indiqué au début (j'avais pas compris)

    Et donc bien sur la bonne page le referer devrait donc être le bon

  8. #8
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Voila qui simplifie le probleme.
    Tu n' aura qu' à changer la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (document.getElementById('toto').innerHTML=="")
    par le code qui cherche le "empty" par la fonction indexOf. Si les conditions ne sont pas remplies tu appelle ensuite ajaxfunc("regieb.php");

    pour ce qui du code de la regie, il sera executé un fois l' affectation suivante faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById('toto').innerHTML = xhr.responseText
    .

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    merci pour cette aide super efficace !

    A bientot

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/01/2009, 12h23
  2. [AJAX] récupérer contenu d'une balise xml
    Par Braillane dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/06/2007, 08h08
  3. [AJAX] Div contenu dans une page ajax
    Par Xris dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/06/2007, 14h34
  4. [XSLT][>XHTML] interprétation du contenu d'un bloc CDATA
    Par Matth_S dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/07/2006, 13h18

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