Quand on "débute"...
... on commence par des EXERCICES SIMPLES !!!
Je persiste, et signe.
jreaux62
Version imprimable
Quand on "débute"...
... on commence par des EXERCICES SIMPLES !!!
Je persiste, et signe.
jreaux62
écrire ça dans un forum JavaScript... :roll:
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.
je préfère serializeArray(); au moins sur la console, c'est un peu plus clair à lire ;)
Code:
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 ); }); });
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:
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:
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:
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.
Pièce jointe 426649
Explication :
1- dans le JS
Code: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:$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.
:alerte: INCONVENIENT : on NE récupère PAS les VRAIS INDEX (11, 22, 33 : voir le code HTML) !
Voici la solution avec serialize() :
Code:
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:
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:
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:
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;
Pièce jointe 426674
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.
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?
merciCitation:
Warning: 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.
Pièce jointe 426742
stp non, ton code (AJAX3) est complètement différent de celui que te propose jreaux62 :roll: ( https://www.developpez.net/forums/d1.../ )
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 ? :?
Énervé ?
Non, pas du tout... :zen:
J'ai seulement l'impression de discuter musique avec un sourd-muet...