Quand on "débute"...
... on commence par des EXERCICES SIMPLES !!!
Je persiste, et signe.
jreaux62
Quand on "débute"...
... on commence par des EXERCICES SIMPLES !!!
Je persiste, et signe.
jreaux62
Dernière modification par NoSmoking ; 15/11/2018 à 19h49. Motif: N'exagerons rien ;)
écrire ça dans un forum JavaScript...
JavaScript est un langage bien plus complexe que PHP, je te l'accorde.
S'imaginer que c'est juste "un petit langage de script" est une très mauvaise approche.
Et de toutes façons la base de ton problème ici est due à ta mauvaise compréhension des mécanismes des pages HTML : la présence de la balise <form> entraîne des mécanismes automatiques de la part du navigateur.
Le langage JavaScript permet bien sur de reprendre la main sur ces mécanismes, mais encore faut il comprendre les rouages du HTML pour y arriver.
«La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode
je préfère serializeArray(); au moins sur la console, c'est un peu plus clair à lire
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $(document).ready(function() { $('.submit').on('click', function( event ){ event.preventDefault(); var datas = $( this ).closest('form').serializeArray(); //serialize(); console.log( 'datas:', datas ); }); });
«La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode
Merci pour ta réponse.
Console log me renvoie
Les valeurs ne semblent pas arriver :S En utilisant le formulaire que tu m'as proposé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 datas: Array []
Si tu as une idée... merci
Voici un EXEMPLE COMPLET, avec appel AJAX et retour PHP :
1- test.php
2- test-ajax.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 <?php header('Content-type:text/html; charset=UTF-8'); // encodage UTF-8 error_reporting(E_ALL); // en TEST !! ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <!-- Script initialisation jquery --> <script src="http://code.jquery.com/jquery.js"></script> <script> $(document).ready(function(){ $('.submit').on('click', function( event ){ event.preventDefault(); // ---------- // on récupère toutes les valeurs var devis_ref = []; // array $('input[name^=devis_ref]').each(function() { devis_ref.push($(this).val()); }); console.log( 'avant:'+devis_ref ); // on VERIFIE ce que ça contient !) devis_ref = JSON.stringify(devis_ref); // JSON.stringify() convertit une valeur JavaScript en chaîne JSON console.log( 'après:'+devis_ref ); // on VERIFIE ce que ça contient !) $.post('test-ajax.php', { devis_ref: devis_ref }, (reponsehtml) => { $('#result').html( reponsehtml ); }); // ---------- }); }); </script> </head> <body> <form> <p><input type="text" name="devis_ref[11]" /></p> <p><input type="text" name="devis_ref[22]" /></p> <p><input type="text" name="devis_ref[33]" /></p> <p><input type="submit" class="submit" value="OK"/></p> </form> <div id="result"><div> </body> </html>
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?php header('Content-type:text/html; charset=UTF-8'); $reponse = []; // array if( isset($_POST['devis_ref']) ) { foreach( json_decode($_POST['devis_ref']) as $id => $devis_ref ) { $reponse[] = $id.' : '.$devis_ref; } } $reponse = implode('<br />', $reponse); // string echo $reponse;
Dans <div id="result"><div>, le retour du traitement PHP s'affiche.
Explication :
1- dans le JS
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part devis_ref = JSON.stringify(devis_ref); // JSON.stringify() convertit une valeur JavaScript en chaîne JSON
- devis_ref est d'abord un array JS.
- JSON.stringify() va le transformer en string (au format JSON), pour pouvoir le transmettre en paramètre via Ajax.
2- dans le fichier PHP :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part $devis_ref_array = json_decode($_POST['devis_ref'])
- json_decode() : décode la chaine reçu (au format JSON), et la transforme en array PHP.
INCONVENIENT : on NE récupère PAS les VRAIS INDEX (11, 22, 33 : voir le code HTML) !
Dernière modification par Invité ; 14/11/2018 à 00h45.
Voici la solution avec serialize() :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <form> <p><input type="text" name="devis_ref[11]" /></p> <p><input type="text" name="devis_ref[22]" /></p> <p><input type="text" name="devis_ref[33]" /></p> <p><input type="submit" class="submit" value="OK"/></p> </form> <div id="result"><div>
Avec .ajax() (pour comparer : les 2 sont équivalents) :
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 $(document).ready(function(){ $('.submit').on('click', function( event ){ event.preventDefault(); // ---------- // on récupère toutes les valeurs var this_data = $( this ).closest('form').serialize(); //serialize(); $.ajax({ url:'test-ajax.php', type:'post', data:this_data, dataType:'html', }) .done( function(texthtml) { $('#result').html(texthtml); }); // ---------- }); });
Avec .post() :
(après moults essais de syntaxe, car je maitrise mieux .ajax() que .post() que je n'utilise pas)...
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $(document).ready(function(){ $('.submit').on('click', function( event ){ event.preventDefault(); // ---------- // on récupère toutes les valeurs var this_data = $( this ).closest('form').serialize(); //serialize(); $.post('test-ajax.php', this_data, '','html') .done( function(texthtml) { $('#result').html(texthtml); }); // ---------- }); });
test-ajax.php : Important : on N'utilise PLUS json_decode :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?php header('Content-type:text/html; charset=UTF-8'); $reponse = []; // array if( isset($_POST['devis_ref']) ) // comme pour un formulaire "normal" { foreach( $_POST['devis_ref'] as $id => $devis_ref ) { $reponse[] = $id.' : '.$devis_ref; } } $reponse = implode('<br />', $reponse); // string echo $reponse;
Avantages :
- en JS : on ne s'embête pas à récupérer les noms des champs (input) : tout est fait automatiquement
- en PHP : ça se traite comme un formulaire PHP "normal" *
- IMPORTANT : on récupère les VRAIS INDEX (11, 22, 33 : voir le code HTML) !
=> Cette solution est à PRIVILEGIER.
Dernière modification par Invité ; 14/11/2018 à 00h53.
Merci pour tes efforts, je vais privilégier la 2ème solution en remplaçant par mon système d'ajout de ligne manuellement et l'insertion en BDD.
En revanche j'ai une erreur qui s'affiche pour tes-ajax.php au niveau du foreach. Quel argument ne lui plait pas?
merciWarning: Invalid argument supplied for foreach() in D:\xampp\htdocs\AJAX3\test-ajax.php on line 6
Ca veut sûrement dire qu'il ne reçoit pas un array.
Comme mon code fonctionne... Il faudrait que tu montres le tien...
N.B. Rappel : si tu as des checkbox, SEULES celles cochées sont récupérées.
Il ne faut donc pas oublier d'en tester l'existence.
Non non j'ai simplement testé ton code et c'est ce qu'il me sort.
AJAX3.rar
stp non, ton code (AJAX3) est complètement différent de celui que te propose jreaux62 ( https://www.developpez.net/forums/d1.../#post10592604 )
je comprends que t'ai réussi à l'énerver, et je t'assure, c'est plutôt rare..
En fait c'est un jeu de ta part? poser des questions techniques et balader ton interlocuteur pour voir jusqu’où tu peux l'énerver ?
«La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode
Énervé ?
Non, pas du tout...
J'ai seulement l'impression de discuter musique avec un sourd-muet...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager