|
|
|
|
Bonjour à tous , je vais tenter de m'expliquer clairement car je rencontre un problème difficile à décrire :
pour visualiser le problème :
lien 1 : http://dealfrance.free.fr/newvers/
lien 2 : http://dealfrance.free.fr/newvers/inscription.php
si vous suivez le lien 1 vous tombé sur le site que je suis en train de mettre en place (pas de commentaire sur l'utilité du site , il est à titre démonstratif)
vous pouvez cliquer sur le lien inscription en haut a droite et vous verrez en cliquant sur les autres lien se que je souhaite faire en ajax :
faire apparaitre les page dans un div pour que seul un morceau de la page se recharge.
pour cela j'ai utilisé la fonction suivante sur mon index :
[CODE]
<script type="text/javascript">
function envoieRequete(url,id)
{
var xhr_object = null;
var position = id;
if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
else
if (window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
// On ouvre la requete vers la page désirée
xhr_object.open("GET", url, true);
xhr_object.onreadystatechange = function(){
if ( xhr_object.readyState == 4 )
{
// j'affiche dans la DIV spécifiées le contenu retourné par le fichier
document.getElementById(position).innerHTML = xhr_object.responseText;
}
}
// dans le cas du get
xhr_object.send(null);
}
</script>
/CODE
cette fonction affiche la page inscription.php dans la div page
[CODE]
<DIV id="page"></div>
/CODE
lors du clic sur le lien codé de la facon suivante :
[CODE]
<a href="#" onclick="envoieRequete('inscription.php','page');">inscription</a>
/CODE
ceci fonctionne comme vous pouvez le voir sur le lien 1
passons au lien numéro 2 : vous pouvez voir les vérification d'un champ de formulaire de facon quasi instantanée , encore une fois fait en ajax
ca fonctionne aussi
[B][U]mon probleme est maintenant que si je combine les 2 ça ne fonctionne plus , je voudrai savoir comment faire pour que ça fonctionne (vous pouvez vérifier que ça ne fonctionne pas en cliquant sur inscription dans le lien numéro 1
les vérifications ne se font pas ou ne s'affiche pas)/U/B
je poste aussi le code de la vérification des champs que j'utilise :
[CODE]
<html>
<head>
<script type="text/javascript" src="jquery-1.2.3.js"></script>
<script>
$(document).ready(function()
{
$("input").focus(function()
{
var info_form=$(this).next(".info");
info_form.empty();
});
$("input").blur(function()
{
var name=($(this).attr("name"));
var value=($(this).attr("value"));
var info_form=$(this).next(".info");
if(value==undefined)
{
info_form.append("<span class='rouge'>Obligatoire</span>");
}
else if(name=="pseudo")
{
$.ajax({
type: "GET",
url: "./verification.php?pseudo="+value,
success:function(data)
{
if(data==1)
{
info_form.append("<span class='rouge'>Un compte avec le même pseudo existe déja</span>");
}
else
{
info_form.append("<span class='vert'>Valide</span>");
}
}
});
}
});
});
</script>
<style type="text/css">
.rouge
{
color:#FF0000;
}
.vert
{
color:#00bb00;
}
</style>
</head>
<body>
<form action="" method="post">
<label> Pseudo : </label><input type="text" name="pseudo"></input><span class="info"></span>
<br/>
<label> </label><input type="submit" name="inscription"></input></span class="info"></span>
</form>
</body>
</html>
/CODE
voila en gros , je me tiens a votre disposition si vous avez des questions et je remercie d'avance ceux qui auront la gentillesse de m'aider
Configuration: Windows XP Firefox 2.0.0.14
(Re-édite ton message et remplace tes balise [ code ] par des balise < code > (sans les espaces), ça sera plus lisible :-) )
|
D'acoord , je veu bien essayer meme avec un autre framework que jquery
|
Il y a bien la fonction getscript :
|
<form action="" method="post"> <label> Pseudo : </label><input type="text" name="pseudo" id="pseudo"/><span class="info"></span> <br/> <label> </label><input type="button" name="inscription" value="envoyer" onClick="envoieRequete_2(url,id_lire,id_ecrire);"/></span class="info"></span> </form> url= adresse de ton script php de verif du login (par ex: 'test.php') id_ecrire= id du div ou tu veux avoir la réponse ('page' je suppose) id_lire=id de l'input du pseudo, pour lire la valeur Dans ta page, tu fais une deuxième fonction Ajax envoieRequette_2:
function envoieRequete_2(url,id_lire,id_ecrire)
{
var xhr_object = null;
var position = id_ecrire;
if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
else
if (window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
// On ouvre la requete vers la page désirée
xhr_object.open("GET", url, true);
xhr_object.onreadystatechange = function(){
if ( xhr_object.readyState == 4 )
{
// j'affiche dans la DIV spécifiées le contenu retourné par le fichier
document.getElementById(position).innerHTML = xhr_object.responseText;
}
}
var obj=document.getElementById(id_lire);
data="pseudo="+obj.value;
// dans le cas du get
xhr_object.send(data);
}
dans ton script php de verif appelé par Ajax, tu récupéres le pseudo envoyé par $pseudo=$_GET['pseudo']; et tu traites et par un echo tu retournes une réponse qui sera affichée dans le div id_ecrire |
D'accord merci de ta réponse , je vois parfaitement ce que tu veu dire la
|
Dans ta première page, en utilisant JQuery, je pensais à faire quelque-chose dans le genre :
/* Fonction sur la première page. */
function envoieRequete(url, id){
/* Chargement du fichier "url" dans l'objet "id" */
$("#" + id).load(url);
/* Chargement et exécution du script associé. On dit que le fichier se nomme
* comme l'autre, mais avec l'extension js en plus.
* Ex : monFichier.html et monFichier.html.js
* (C'est pas ce qu'il y a de mieux, mais ca doit marcher) */
$.getScript(url + ".js")
}
Apres, tu modifie ton fichier HTMl en enlevant tous ce qui dans les balises "script". Le contenu de ces balises script sont copié dans le fichier js "inscription.php.js". |
Bon malheureusement cela ne fonctionne pas (j'ai peut être fait une erreur je détail donc)
<script type="text/javascript" src="jquery-1.2.3.js">
function envoieRequete(url, id){
$("#" + id).load(url);
$.getScript(url + ".js")
}
</script>
dans mon fichier inscription.php
<html>
<head>
<style type="text/css">
.rouge
{
color:#FF0000;
}
.vert
{
color:#00bb00;
}
</style>
</head>
<body>
<form action="" method="post">
<label> Pseudo : </label><input type="text" name="pseudo"></input><span class="info"></span>
<br/>
<label> </label><input type="submit" name="inscription"></input></span class="info"></span>
</form>
</body>
</html>
et enfin dans mon fichier inscription.php.js
$(document).ready(function()
{
$("input").focus(function()
{
var info_form=$(this).next(".info");
info_form.empty();
});
$("input").blur(function()
{
var name=($(this).attr("name"));
var value=($(this).attr("value"));
var info_form=$(this).next(".info");
if(value==undefined)
{
info_form.append("<span class='rouge'>Obligatoire</span>");
}
else if(name=="pseudo")
{
$.ajax({
type: "GET",
url: "./verification.php?pseudo="+value,
success:function(data)
{
if(data==1)
{
info_form.append("<span class='rouge'>Un compte avec le même pseudo existe déja</span>");
}
else
{
info_form.append("<span class='vert'>Valide</span>");
}
}
});
}
});
});
manque t'il quelques choses ? la fonction d'appel de page de l'index marche toujours sans probleme en revanche si je vais sur le fichier inscription directement il ne vérifie plus tout seul et rien a faire ne marche pas dircetement dans l'index il manque peut etre qqs choses ? |
A première vue, pour moi ça ma l'air bon.
/* A ajouter au début du fichier inscription.php.js */
alert('Chargement effectué, exécution en cours');
/* A ajouter à la fin du fichier inscription.php.js */
alert('Exécution terminé');
Avec un alert au début, et un à la fin on peut ce rendre compte des erreurs qu'il peut y avoir : - aucun alert : le chargement à foiré - seulement le premier alert : une erreur c'est produit pendant l'exécution du script - les deux alert : tout marche correctement (enfin normalement) - seulement le dernier alert : alors là je dit bravo EDIT : au fait tu as bien penser à mettre <script type="text/javascript" src="jquery-1.2.3.js"></script>dans ton fichier index.php ? |
Ok je vais tester
|
Je vais t''envoyer mon Email en message personnel, comme ça tu pourra m'envoyer tes sources.
|
Je pense avoir trouver d'où vient le problème :
$.ajaxSetup({
async: false
});
Cela passe le mode de chargement des données en synchrone. Si on veut rester en asynchrone pour les futur chargement, on peut faire ainsi : function envoieRequete(url, id){
$.ajaxSetup({
async: false
});
$("#" + id).load(url);
$.getScript(url + ".js");
$.ajaxSetup({
async: false
});
}
Ensuite, on modifie le fichier inscription.php.js. Là ou on avait : $(document).ready(function()
{
/* Mon code */
});
on le remplace par : /* Mon code */ J'ai essayer chez moi, et sa m'a l'air de fonctionner correctement. Par contre, il y a un peu inconvénient dans ma méthode : on essaye dans tout les cas de charger un fichier js, même s'il n'y en a pas. On pourrait tenter de modifier la fonction envoieRequete() pour lui rajouter un paramètre en plus : });</code> Cela passe le mode de chargement des données en synchrone. Si on veut rester en asynchrone pour les futur chargement, on peut faire ainsi : function envoieRequete(url, id, script){
$.ajaxSetup({
async: false
});
$("#" + id).load(url);
if(script){
$.getScript(url + ".js");
}
$.ajaxSetup({
async: false
});
}
et on appel la fonction avec un booléen en plus. S'il est a "true" alors on charge le script, sinon on ne le charge pas. |