Ajax et formulaire, les donnees ne sont pas transmises

pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009 - 7 avril 2009 à 12:09
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009 - 8 avril 2009 à 16:43

24 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
7 avril 2009 à 12:12
si on répond au titre, c'est normal,
avec ajax on n'utilise pas de formulaire.







 [mon Site] [M'écrire] Bul
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
7 avril 2009 à 13:43
Tu veux dire que je ne peut pas faire passer quelques variables provenant d'un formulaire via ajax ?
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
7 avril 2009 à 14:00
je n'ai pas dit cela
j'ai dis que ajax n'utilisait pas un formulaire.
rien ne t'empêche de récupérer les champs d'un
formulaire pour les transmettre avec ajax.
@+
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
7 avril 2009 à 14:03
Euh c'est normal que mon 1er message semble vide ? J'avais mis mon code dedans mais moi je ne vois rien ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
7 avril 2009 à 18:00
pas normal, et je ne vois rien moi non plus,
c'est pour ça et les petites bannières et
le contenu de mon 1er message
quel navigateur utilises-tu ?
ton code, copié/collé depuis un
éditeur de texte, ou cliquer sur
"textbox normale" en dessous du bouton
@+
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 11:13
Bon ben je sait pas ce que j'ai fait mais bon voila, je vais re-saisir tout ça.

Donc mon problème est finalement double, à savoir que ma page ne fonctionne pas sous Firefox mais fonctionne sous IE7.
Ensuite, mon script permet en fait d'ajouter à mon formulaire une liste déroulante, j'en ai prévu cinq en tout qui viennent s'ajouter au fur et à mesure des choix que l'on fait dans la liste précédente. Le second problème est donc que la troisième liste est une répétition de la seconde et du coup les suivantes n'apparaissent pas non plus.

Donc voici ma page index.php qui elle n'as rien de particulier
<hr size= "2" width="100%" />    <head>
        <script type="text/javascript" src="ajax.js"></script>
        <script type="text/javascript" src="fonction.js"></script>
    </head>
   
        <form>
            <label>Crit&egrave;re 1</label>
                <select name="critere" id="critere" onchange="liste(critere,no_table)">
                    <option value="-1">Aucun</option>
                    <?php
                        $sql = mysql_query('SELECT * FROM critere_1 ORDER BY libelle') or die (mysql_error());
                        while ($retour = mysql_fetch_array($sql)) {
                            echo '<option value="'.$retour['id'].'">'.$retour['libelle'].'</option>';
                        }
                    ?>
                </select>
               

               

               

               

<hr size="2" width="100%" />mon script js, fichier fonction.js
<hr size ="2" width="100%" />function liste(){
    var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
    xhr.onreadystatechange = function(){
        // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
        if(xhr.readyState == 4){
            if(xhr.status != 200){ //on verifie que le code de status soit ok
                //sinon on affiche le code statut erreur
                document.getElementById("loading").innerHTML = "Erreur code "+xhr.status;
            }else if(xhr.status == 200){
                leselect = xhr.responseText;
                // On se sert de innerHTML pour rajouter les options a la liste
                document.getElementById("suite").innerHTML = leselect;
            }else{
                document.getElementById("loading").innerHTML = "Chargement... ";
            }
        }
    }

    // Ici on va voir comment faire du post
    xhr.open("POST","blank.php",true);
    // ne pas oublier ça pour le post
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    // ne pas oublier de poster les arguments
    xhr.send("critere="+document.getElementById("critere").value+"&no_table="+document.getElementById("no_table").value);
}
function liste1(){
    var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
    xhr.onreadystatechange = function(){
        // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
        if(xhr.readyState == 4){
            if(xhr.status != 200){ //on verifie que le code de status soit ok
                //sinon on affiche le code statut erreur
                document.getElementById("loading").innerHTML = "Erreur code "+xhr.status;
            }else if(xhr.status == 200){
                leselect = xhr.responseText;
                // On se sert de innerHTML pour rajouter les options a la liste
                document.getElementById("suite1").innerHTML = leselect;
            }else{
                document.getElementById("loading").innerHTML = "Chargement... ";
            }
        }
    }

    // Ici on va voir comment faire du post
    xhr.open("POST","blank.php",true);
    // ne pas oublier ça pour le post
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    // ne pas oublier de poster les arguments
    xhr.send("critere="+document.getElementById("critere").value+"&no_table="+document.getElementById("no_table").value);
    file();
}
.... (à partir d'ici j'ai recopié mes fonctions en incrémentant les quelques valeurs qui en ont besoin car je ne sait pas le faire en js et puis de toute façon j'aimerais déjà que sa marche comme ça.
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 11:16
arf, j'ai fait une bêtise il en manque un petit bout.

Donc pour finir le fichier blank.php appeler par le script
<hr size="2" width="100%" /><?php
    require 'connect.php';
    if(isset($_POST['critere']) && isset($_POST['no_table'])) {
        $critere=$_POST['critere']; //id du critere recuperer du formulaire
        $no_table=$_POST['no_table']; //pour indiquer si on est au 2e, au 3e... critere
        $table="critere_".($no_table+1); //la table critere ou chercher les infos
        $idcri="idcri_".($no_table); //dans les tables 2,3... le champ idcri correspond à l'id de la table precedente
        $form=($no_table+1);
    }
?>
    <label>Crit&egrave;re <?php echo $form?></label>
        <select name="critere" id="critere" onchange="liste1(critere,no_table)">
            <option value="-1">Aucun</option>
            <?php
                $sql = mysql_query('SELECT * FROM '.$table.' WHERE '.$idcri.'='.$critere.' ORDER BY libelle') or die (mysql_error());
                while ($retour = mysql_fetch_array($sql)) {
                    echo '<option value="'.$retour['id'].'">'.$retour['libelle'].'</option>';
                }
                echo '</select>&nbsp;&nbsp;';
            ?>
<?php mysql_close(); ?>
<hr size="2" width="100%" />Voila, j'espère que quelqu'un pourra m'aider.
Merci.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 avril 2009 à 11:23
>>ma page ne fonctionne pas sous Firefox mais fonctionne sous IE7.
ah... plus rien à voir ça
difficile sans tester et comme on n'a pas tout....
mais pas de raisons fondamentales , si ça baigne
       avec IE, ça doit baigner avec FF, même s'il
       existent quelques différences ( doux euphémisme )
il doit, probablement, y avoir des erreurs de signalées
tu as fais du deboggage ?

Navigateurs |Quelques Explications |----

Chrome, contrôler page actuelle / Options pour développeurs
/ Console Javascript, ----

FireFox, Outils / Console d'erreurs
et mieux : télécharger FireBug, ----

Internet
Explorer, activer le deboggage : Outils/options Internet/Avancés
dans la liste, sous "Navigation" : décocher
o Afficher une notification de chaque erreur de script
o Désactiver le débogage de Scripts (Internet Explorer)
et mieux (pour IE < 8) : télécharger le Debogger IE
voir aussi : DebugBar et Companion JS, ----

K-Meleon, utils / Cons, ----

Opera, utils / Asole d'erreurs, ----

Safari, Debug / Show JavaScript Console
° modifier Fichier com.apple.Safari.plist situé dans le
répertoire : Support:\Documents and Settings\utilisateur
\Application Data\Apple Computer\Safari\Preferences\
y ajouter <key>IncludeDebugMenu</key>
----
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 11:50
Alors IE ne m'affiche rien, comme ça c'est fait

Par contre sous FF, la console d'erreur et firebug marque
document.getElementById("no_table") is null Ligne: 50
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 avril 2009 à 11:59
l'élément n'a pas d'ID : IE remplace par le name, pas FF
   ça doit le faire...
au moins pour cette étape ;o)
@+
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 13:44
Nikel merci bul3, ça fonctionne sous IE et FF désormais, mais le second problème reste entier.
Je vois dans Firebug que la seconde liste renvoie des données mais on dirait que comme les variables existent déjà elles ne sont pas écrasées par les nouvelles.

Pour rappel, dans mon index, j'ai une 1ere liste déroulante, en fonction du choix sélectionné une seconde apparait, et en fonction du choix de la seconde et une troisième est censé apparaitre, mais j'ai bien l'impression que ce sont toujours les premières variables qui sont envoyées, du coup c'est toujours ma seconde liste qiu revient.

Comment puis-je faire pour effacer ces variables une fois utilisés ?
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 avril 2009 à 13:51
>>j'ai une 1ere liste déroulante, en fonction du choix sélectionné une seconde apparait,
question récurrente
ch'tiot exemple ici

>>ce sont toujours les premières variables qui sont envoyées
problème de cache ?
ajoute un machin aléatoire à l'url
en javascript par exemple : "page/?"+new Date()
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 14:06
Pas de problème de cache la date est bien différente.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 avril 2009 à 14:31
>>j'ai bien l'impression que ce sont toujours les premières
variables qui sont envoyées,
tu peux vérifier, alert coté js, echo coté php, et même avec les deboggueurs

>>la date est bien différente.
pas compris... ?
je te donnais l'exemple d'ajouter new Date ( date+heure ) pour
éviter que les navigateurs ne renvoient le cache. rien d'autres
tu peux mettre n'importe quoi pourvu que ce soit différent
des appels précédents
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 14:40
J'ai vérifier dans Firebug et c'est bien les mêmes données qui sont envoyés à chaque fois. Pour contourner ce problème, j'ai incrémenter mes variable critere et no_table dans mon blank.php et répercuter ses incrémentions dans mes script puisque j'ai fait autant de script que de liste déroulante même si c'est pas très propre comme méthode.

Mais si t'as une idée j'suis preneur.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 avril 2009 à 14:59
>>c'est bien les mêmes données qui sont envoyés à chaque fois
pas regardé ton code, mais si ce sont les mêmes données
c'est qu'elles ne sont pas modifiées.... ou alors je ne comprend rien ?
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 avril 2009 à 15:02
ou que tu ne prends pas les bonnes données !?!
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 avril 2009 à 15:25
xhr.send("critere="+document.getElementById("critere").value+
            "&no_table="+document.getElementById("no_table").value);
}

donc...

j'aimerai bien voir le html généré pour :
echo '<option value="'.$retour['id'].'">'.$retour['libelle'].'</option>';
        je préfère d'ailleurs utiliser le select.options[le select.selectedIndex].value
            mais "l'abréviation" doit fonctionner.

quand à no_table...

c'est modifié où, quand, comment....
0
pix270 Messages postés 12 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 15:27
Ben en gros voila mon fichier qui est appelé en ajax
<hr size="2" width="100%" /><?php
    require 'connect.php';
    if(isset($_POST['critere']) && isset($_POST['no_table'])) {
        $critere=$_POST['critere']; //id du critere recuperer du formulaire
        $no_table=$_POST['no_table']; //pour indiquer si on est au 2e, au 3e... critere
        $table="critere_".($no_table+1); //la table critere ou chercher les infos
        $idcri="idcri_".($no_table); //dans les tables 2,3... le champ idcri correspond à l'id de la table precedente
        $form=($no_table+1);//pour préciser qu'on est au critere precedent +1
    }
?>
<label>Crit&egrave;re <?php echo $form?></label>
        <select name="critere" id="critere" onchange="<?php echo 'liste'.$no_table.'()';?>">
            <option value="-1">Aucun</option>
            <?php
                $sql = mysql_query('SELECT * FROM '.$table.' WHERE '.$idcri.'='.$critere.' ORDER BY libelle') or die (mysql_error());
                while ($retour = mysql_fetch_array($sql)) {
                    echo '<option value="'.$retour['id'].'">'.$retour['libelle'].'</option>';
                }
                echo '</select>;
                mysql_close();
            ?>
<hr size="2" width="100%" />En fait j'ai à chaque fois deux variables qui influe sur le contenu de ma liste. La variable "critere" et "no_table". Leurs valeurs est différentes à chaque ligne de chaque liste et renvoie donc à des tables différentes, seulement j'ai l'impression que js ne met pas à jour ces variables quand je rappelle mes fonctions.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 avril 2009 à 15:32
mais je n'ai pas ta base de données moi....
comment je devine ? ce que contient $retour['id']
et $form ( qui est donc toujours le même pour un échange )

de toutes manières si ton alert de contrôle te donne
la même valeur à chaque... pas de mystère !
0
Rejoignez-nous