|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Bonjour à tous
Alors voila mon probleme, j'ai dans un formulaire, utilisé AJAX pour actualiser une seconde liste deroulante à partir d'une premiere, puis actualiser une zone de texte à partir de la deuxieme... Tout ça marche bien (que sur firefox d'ailleurs je sais pas si c'est normal). et maintenant, dans ma page de vérification du formulaire, je pensais pouvoir récuperer normalement les valeurs actualisées (notament la selection sur la deuxieme liste) en $_POST, mais PHP ne la trouve pas. C'est comme si le submit n'envoyait que les données présentes au premier affichage de la page, et donc que les parties actualisées par AJAX n'en font pas partie. il ne rentre donc pas dans la condition suivante Comment je peux faire ? si vous voulez une autre partie du code demandez le moi. Merci |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : janvier 2007 Messages : 238 ![]() |
Bonjour,
Je suis en plein dans l'étude d'ajax ... Pourrais-tu nous mettre faire part de ton code ? |
|
|
00
|
|
|
#3 | ||||||
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
oui bien sûr.
Pour simplifier le code et ne pas trop surcharger la discussion, j'ai retiré certains éléments qui peuvent faire paraitre ce script défaillant mais il marche Alors voici le code HTML: Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Pour récupérer quelque chose dans $_POST côté serveur, il faut avoir utilié la méthode "post" côté client.
Or, si je lis bien ton code : Code :
requete.open('GET', url, true); /* Préparation d'une requête asynchrone de type GET */ |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Oui tu as raison mais le GET que tu vois là sert pour transmettre la variable à ma page references.php, qui elle même est alors inclue dans le formulaire apres actualisation d'AJAX.
Dans references.php, je récupère bien un GET pour avoir le resultat de la requete XMLHttpRequest: Code :
$four = isset($_GET['four']) ? $_GET['four'] : false; Code :
<form id="commande" name="commande" method="POST" enctype="multipart/form-data" action="vcommande.php"> |
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Ha oui, autant pour moi, j'avais lu trop vite...
La déclaration de ton formulaire semble incorrecte : balise fermante </form> absente et de toutes façons, il faudrait la placer dans le <tr> où la balise ouvrante a été déclarée. Si tu déclares ta balise <form> correctement avant et après la <table>, ça pourrait aller mieux. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Oh oui c'etait ça !! ça marche maintenant.
En fait je comprenais pas parce que les autres variables je les récupérait bien, il me manquait que celles actualisées par AJAX. Je suis pas sur de comprendre pourquoi ça marche mieu en encadrant le <table> par mon form plutot que l'inverse, mais c'est pas grave. Merci beaucoup Herode !
|
|
|
00
|
|
|
#8 | |||
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Citation:
La raison est que si ton élément n'est pas bien formé, donc pas conforme au DOM, tu n'as aucune garantie que les navigateurs vont le traiter correctement. Dans ton cas, il y avait deux erreurs sur ton élément <form>, qui était donc - ignoré du navigateur lors du submit - traité différemment au niveau du rendu visuel, le résultat dépendant de la tolérance des navigateurs aux erreurs. Les deux erreurs sont : 1 - balise non fermée 2 - si tu mets <form> à l'intérieur de la table, ce qui est possible, il faut refermer avec la balise </form> selon les normes d'imbrication. En particulier, une suite comme Code :
|
|||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Je vois, seulement ce que j'ai oublié de te dire c'est que je n'avais pas mis tout le code dans mon premier message, mais je fermais bien mon <form> plus bas, et avant de fermer mon <table>. C'est juste qu'en changeant l'ordre d'imbrication, c'est à dire <table> dans <form> et non plus <form> dans <table> que ça a marché.
Et sinon aurais tu une idée pourquoi cela ne fonctionne pas sous IE ? j'ai remarqué que cela fonctionnait en utilisant un <span> au lieu d'un <tr> pour rafraichissement, mais avec le span le champ actualisé etait en dehor du tableau donc formulaire tout moche ! Avec le <tr>, firefox fait ça comme il faut mais IE ne fai rien on peut voir en bas "Erreur sur la page" avec un logo JavaScript. |
|
|
00
|
|
|
#10 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Sans doute. Quel est le code HTML correspondant aux différents cas ?
|
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Comment ça aux différents cas ? tu veux dire avec le <tr> et avec le <span> ?
|
|
|
00
|
|
|
#12 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Oui
|
|
|
00
|
|
|
#13 | ||||||
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Alors avec le <tr>
Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#14 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Dans le deuxième cas, le <span> n'est pas autorisé ici, c'est pourquoi les navigateurs ne fournissent pas le rendu auquel tu t'attends.
Dans le cas du <tr>, une erreur dans le code HTML mais ça vient peut-être du copier-coller ? Code :
<option value= "0" selected>- - - - - - - -</option><? A part ces deux détails, le code HTML a l'air bon sur cet extrait. L'erreur sous IE vient sans doute du "<?" en trop s'il y est vraiment, sinon il faut examiner le code javascript de mise à jour dans le traitement AJAX. |
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Oui effectivement c'est à cause du copier-coller, car normalement j'ai une requete SQL pour afficher la liste déroulante, la j'avais mis des exemples basiques pour simplifier (je modifie ça dans mon copier-coller) mais ce n'est donc malheureusement pas de là que vient le problême.
Sinon tu devais avoir raison pour le align="center" sur le <select> puisque ça n'a rien changé, mais avec le span j'ai toujours le problême de la position. Le code JS est plus haut, je ne vois pas ce que je pourrais changer surtout que je ne maitrise pas vraiment AJAX. Pourquoi le span n'est-il pas autorisé ici ? |
|
|
00
|
|
|
#16 | |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Heu... par définition de l'élément <table> Mais je ne vais pas te faire un cours HTML ici, voir plutôt les références sur ce thème.
Citation:
Code :
document.getElementById('refs').innerHTML = requete.responseText; |
|
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Ah ben nan moi je veux bien utiliser autre chose ! lol.
Mais y'a quoi d'autre comme balises JS pour remplacer le innerHTML ? |
|
|
00
|
|
|
#18 |
|
Membre régulier
![]() Lionel LebeauInscription : septembre 2005 Messages : 76 ![]() |
Pas d'accord.
Le innerHTML fonctionne justement très bien dans tous les navigateurs. L'autre solution est de saucissonner ce que tu veux insérer pour reconstruire l'arbre DOM. C'est lourd, très lourd pour le poste sur lequel ça s'effectue, surtout s'il s'agit d'un ordi pas tout jeune. |
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 17 ![]() |
Merci mais j'ai finalement réussi à obtenir ce que je voulais avec le innerHTML en mettant l'id sur le <td> et non plus sur le <tr>. Tout bête mais simple et efficace !
Merci pour vos réponses à tous
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com