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

Développement Web en Java Discussion :

Problème de paramètre dans OPEN GET ajax


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Par défaut Problème de paramètre dans OPEN GET ajax
    Bonjour à tous les développeurs !

    J'ai un frameset, "encapsulant" un formulaire de contact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <frameset rows="*" onbeforeunload="sendRequest()">
              <frame name="contenu" src="formulaire.php" frameborder="0" noresize>
         </frameset>
    ainsi que la fonction AJAX correspondante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function sendRequest()
              {
         XHR = getXMLHttpRequest()
         if (typeof(XHR) == "object")
              {
              XHR.open("GET", "php/destroy.php", false);
              XHR.send();
              }
              }
    Je vous ai fait grâce du code relatif à l'objet XMLHttpRequest, mais tout fontionne correctement.
    Le but à atteindre est de tuer une session quand on quitte le frameset (un peu comme en rando: On ramasse son garbage !)

    Quel est mon souci ?
    Si je veux paramétrer la fonction sendRequest en transmettant le non du programme à appeler '(ici : "php/destroy.php")
    la requête n'est plus exécutée !
    ---onbeforeunload="sendRequest("php/destroy.php")"
    ---function sendRequest(MON_URL) avec XHR.OPEN5 "GET", MON_URL, false); // ne fonctionne plus !

    Pourquoi ce fignolage ?... Je voudrais en réalité pouvoir réutiliser la fonction à un autre moment et pour soumettre une requête différente ; Notamment via "parent.sendRequest()" et ce à partir de la frame "contenu".

    D'avance merci, (j'ai déjà cherché un peu partout, mais en vain). Il y une subtilité...

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Par défaut problème de paramètre dans OPEN Ajax
    Bonjour à tous les développeurs !

    J'ai un frameset, "encapsulant" un formulaire de contact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <frameset rows="*" onbeforeunload="sendRequest()">
         <frame name="contenu" src="formulaire.php" frameborder="0" noresize>
    </frameset>
    ainsi que la fonction AJAX correspondante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function sendRequest()
     {
     XHR = getXMLHttpRequest()
     if (typeof(XHR) == "object")
          {
          XHR.open("GET", "php/destroy.php", false);
          XHR.send();
          }
     }
    Je vous ai fait grâce du code relatif à l'objet XMLHttpRequest, mais tout fontionne correctement.
    Le but à atteindre est de tuer une session quand on quitte le frameset (un peu comme en rando: On ramasse son garbage !)

    Quel est mon souci ?
    Si je veux paramétrer la fonction sendRequest en transmettant le non du programme à appeler (ici : "php/destroy.php")
    la requête n'est plus exécutée !
    - onbeforeunload="sendRequest("php/destroy.php")"
    - function sendRequest(MON_URL) avec XHR.OPEN5 "GET", MON_URL, false); // ne fonctionne plus !

    Pourquoi ce fignolage ?... Je voudrais en réalité pouvoir réutiliser la fonction dans d'autres circonstances ; Notamment via "parent.sendRequest()" et ce à partir de la frame "contenu".

    D'avance merci, (j'ai déjà cherché un peu partout, mais en vain). Il y une subtilité...

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu prends le problème à l'envers à mon avis.

    Il faut activer périodiquement la session via un appel ajax et limiter la durée de vie de la session au strict minimum (entre 1 et 5 mn).
    Si ton utilisateur ferme son navigateur, dans ton cas, l'appel n'est pas fait et la session reste active.
    Dans mon cas, il peut faire ce qu'il veut, mais dès que les appels ajax cessent, la session est condamnée à court terme (s'il reste sur la page, pas de problème, la session étant "utilisée" par l'appel ajax, elle restera active).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Par défaut paramétrage OPEN GET Ajax
    Bonjour !
    J'ai résolu mon problème qui provenait du code lors de l'appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    onbeforeunload="sendRequest("php/destroy.php")"     //  ne fonctionne pas !
    onbeforeunload="sendRequest(\"php/destroy.php\")"  // ne fonctionne pas ! 
    onbeforeunload="sendRequest('php/destroy.php')"      // YES !
    onbeforeunload=sendRequest("php/destroy.php")     // YES !
    En plus, j'avais un ';' qui traînait dans mon code, m'empêchant de faire des tests concluants (une erreur qui en cache une autre...)

    Quant à la finalité de l'exercice :
    Lors du click sur la croix, la session est bien détruite, car "onbeforeunload" du frameset est activé, entrainant la requête de destruction.
    J'ai construit cela ainsi, pour éclaircir mon code :
    - Le frameset gère le "click croix", la frame gère le formulaire et son "submit", ainsi que les transactions subséquentes...
    - Avant, je procédais autrement, mon formulaire gérait, et la croix et le submit, mais le code était brouillon...
    - De plus il me fallait aussi gérer le "click croix" dans l'affichage succédant au traitement des données.
    C'était lourd !
    Par ailleurs, cette façon de faire permet, à toute transaction du frame de faire une requête Ajax très facilement. (Le fils utilise les outils de son père...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parent.SendRequest('toute_transaction');
    Cordialement

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Si on recharge le frame, l’évènement est déclenché...
    En plus, si tu fermes le navigateur, l'action n'est pas appelée pour tous les navigateurs (ça marche avec IE).
    Bref, tu fais comme tu veux...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Par défaut paramétrage OPEN GET Ajax
    Bonjour !
    Je n'avais pas tout testé (notamment le refresh), par ailleurs il y avait un dysfonctionnement \ FIREFOX.
    Après consultation de nombreux forums, il apparait qu'onbeforeunload ne doit pas être écrit n'importe-comment. J'ai donc retenu le code suivant qui convient à IE et FF, et il n'y plus d'argument dans la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <frameset rows="*" onbeforeunload="sendRequest()" >
         <frame name="contenu" src="formulaire.php" frameborder="0" noresize scrolling="no">
    </frameset>
    Ma fonction senRequest est devenue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function sendRequest()
              {
         if ( window.event ) alert(window.event.type) ;
         XHR = getXMLHttpRequest();
         var argument = scriptName ;
         if (typeof(XHR) == "object")  
              {                    
              XHR.open("GET", argument, false);
              XHR.send();
              }
              }
    Il me suffit d'alimenter la variable globale scriptName pour toute requête et à n'importe quel moment !

    PS : Les tests sont un peu laborieux sous FF, Opera et Chrome, l'objet window.event étant exclusivement IE...

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

Discussions similaires

  1. [AJAX] Paramètre dans OPEN GET Ajax
    Par iakou dans le forum AJAX
    Réponses: 5
    Dernier message: 15/05/2014, 18h49
  2. Réponses: 0
    Dernier message: 30/10/2007, 15h45
  3. Réponses: 1
    Dernier message: 06/03/2007, 11h57
  4. Problème avec paramètres dans un <messagebundle>
    Par imagine64 dans le forum JSF
    Réponses: 6
    Dernier message: 12/02/2007, 17h27
  5. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 10h53

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