Bonjour à tous,
J'ai un formulaire de trois champs (Prix unitaire, quantité et total pour ce produit) dont l'un (prix unitaire) est documenté par le choix dans une liste déroulante alimentée par une requête en Php sur une table MySQL.
Je passe par $j.ajax pour récupérer la valeur de prix unitaire et cela fonctionne à ceci près que le prix affiché est toujours celui du choix précédent (toujours décalé d'un choix donc, je reste toujours asynchrone).
Je colle sur la formule a utiliser après deux jours de recherches et autres tests (callback, promise, etc.)
Auriez vous une piste, un conseil à me suggérer SVP ?
Je vous en remercie par avance !
Ci dessous, le code :
// Le fichier .js
// le fichier 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 $j(function() { /* Passe les champs total_produit et prix unitaire en lecture seule */ var fieldlist = ('#total_produit, #prix_unitaire'); $j(fieldlist).prop('readonly', true); /* Sur changement de la valeur dans la combo produits */ $j('#produit-container').on('change', function() { var idProSelect = $j('#produit').val(); console.log(idProSelect); // Debug if (idProSelect == '{undefined}') { $j('#prix_unitaire').val(''); } else { $j.ajax({ url: 'hooks/ajax-ads_sub_adhesion.php', type:'GET', dataType : 'json', // cache: false, async: true, data: {id: idProSelect}, success: function(data) { $j('#prix_unitaire').val(data); console.log($j('#prix_unitaire').val()); // Debug }, error: function (jqXHR, textStatus, errorThrown) { console.log("L'appel Ajax est un échec."); } }) } }); /* Recalcul le total sur modification quantité */ $j('#prix_unitaire, #quantite').change(function(){ var prix_unitaire = parseFloat($j('#prix_unitaire').val()) || 0; var quantite = parseFloat($j('#quantite').val()) || 0; var total_produit = Math.round(prix_unitaire * quantite * 100) / 100; $j('#total_produit').val(total_produit); $j('#total_produit').change(); }); })
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
16
17
18 <?php $currDir = dirname(__FILE__) . '/..'; include("$currDir/defaultLang.php"); include("$currDir/language.php"); include("$currDir/lib.php"); /* Permettre l'accès à tous les utilisateur ayant accès à la table sub_adhesions */ $od_from = get_sql_from('ads_sub_adhesion'); if(!$od_from){ header('HTTP/1.0 401 Unauthorized'); exit; } /* Requête sur table catalogue pour sélection produit en fonction de la variable récupérée */ $idProSelect = intval($_REQUEST['id']); $prix_unitaire = sqlValue("SELECT `prix_unitaire` FROM `ads_catalogue_produits` WHERE `idProduit` = '$idProSelect'"); /* Renvoi résultat */ echo json_encode($prix_unitaire);
Christophe
Partager