Problème de paramètre dans OPEN GET ajax
Bonjour à tous les développeurs !
J'ai un frameset, "encapsulant" un formulaire de contact :
Code:
1 2 3
| <frameset rows="*" onbeforeunload="sendRequest()">
<frame name="contenu" src="formulaire.php" frameborder="0" noresize>
</frameset> |
ainsi que la fonction AJAX correspondante :
Code:
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é...
problème de paramètre dans OPEN Ajax
Bonjour à tous les développeurs !
J'ai un frameset, "encapsulant" un formulaire de contact :
Code:
1 2 3
| <frameset rows="*" onbeforeunload="sendRequest()">
<frame name="contenu" src="formulaire.php" frameborder="0" noresize>
</frameset> |
ainsi que la fonction AJAX correspondante :
Code:
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é...
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:
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:
parent.SendRequest('toute_transaction');
Cordialement
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:
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:
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...
paramétrage Open GET Ajax
Bonjour !
J'ignorais la spécificité du window.event, et j'ai galéré pour mes tests :
A défaut d'affichage de l'évènement, je devais en effet vérifier à chaque étape dans C:/wamp/tmp que mes sessions étaient bien détruites ou modifiées, ou bien dans access.log que mes XHR.open("GET") étaient bien exécutés. (Quel boulet !...)
J'aurais dû en effet faire comme vous me le suggérez, ou plus simplement ajouter dans ma fonction :
Code:
1 2
| if (!e) e = window.event ;
alert (e.type) ; |
Je laisse encore un peu ce POSTen 'non résolu' (je débute en dév web, et toute suggestion est bienvenue)
Un grand merci aux animateurs de ce site très PRO !