Ik probeer binnen een formulier de waarden van verschillende input-velden te updaten op moment dat er een select-veld wordt gewijzigd. Dit wil ik doen middels ajax, en dat is dan ook tevens (pas) mijn eerste ervaring hiermee.
Zoals ik het eindresultaat nu voor me zie wordt er bij een wijziging van het select-veld een call gedaan naar loaddata.php. Deze haalt op basis van de select-value een casus met hetzelfde ID op en creeert een JSON-string. Deze string moet vervolgens worden ingeladen over de input-velden.
Wanneer ik /loaddata.php?casus_id=2 direct aanroep krijg ik netjes de string met data geprint:
Mijn conclusie is dus dat dát werkt zoals het hoort. Echter, wanneer ik de selectie op de index-pagina wijzig, lijkt het of het script voor de call niet getriggerd wordt. Ik zie ook niets 'flikkeren' op beeld waardoor het idee dat er niets gebeurt versterkt. Daarom ben ik (vooral) aan het kijken naar de 1e regel van het call, en heb getest met verschillende waarden zoals ".change(function()" of "on('change', function()", data-waarden of verwerking van responses. Ik heb het script door een validator getrokken en daarin komen geen rare meldingen naar voren. Het weergeven van errors is ingeschakelt voor alles (E_ALL), maar geeft geen foutmeldingen terug. Ik weet ook zeker dat ik de juiste jquery aanroep, want andere afhankelijkheden daarvan werken wel.
Ik kan nu niet achterhaald waarom het niet werkt zoals het zou moeten. De onervarenheid met ajax zal vast een rol spelen, maar andere mogelijke oorzaken krijg ik met logisch beredeneren ook niet meer gevonden en daar heb ik even wat hulp nodig.
Waar zit nu de oorzaak van het niet updaten van de invoervelden bij het wijzigen van een selectie?
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
| // INDEX.PHP <head> <script-tbv-jquery> <script type="text/javascript"> $('#casus_id').change(function() { $.ajax({ type:'GET', url:'loaddata.php', data:{casus_id: casus_id}, dataType: 'json', success: function(response){ var data = JSON.parse(response); $('#casus').val(response.casus); $('#omschrijving').val(response.omschrijving); } }); }); </script> </head> <body> <form method="post"> <select name="casus_id" id="casus_id" class="form-control"> <option value="1">Casus A</option> <option value="2">Casus B</option> <option value="3">Casus C</option> </select> <input id="casus" name="casus"> <textarea id="omschrijving" name="omschrijving" rows="5"></textarea> </form> </body> |
Zoals ik het eindresultaat nu voor me zie wordt er bij een wijziging van het select-veld een call gedaan naar loaddata.php. Deze haalt op basis van de select-value een casus met hetzelfde ID op en creeert een JSON-string. Deze string moet vervolgens worden ingeladen over de input-velden.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| // LOADDATA.PHP <?php $casus_id = isset($_GET['casus_id']) ? htmlentities($_GET['casus_id']) : die; $sql = "SELECT * FROM cas_casus WHERE casus_ident = :casus_id"; $statement = $pdo->prepare($sql); $statement->bindParam(':casus_id', $casus_id, PDO::PARAM_INT); $statement->execute(); $row = $statement->fetch(PDO::FETCH_ASSOC); die(json_encode($row)); ?> |
Wanneer ik /loaddata.php?casus_id=2 direct aanroep krijg ik netjes de string met data geprint:
code:
1
| {"ident":60,"casus_id":2,"actief":1,"verborgen":0,"aangemaakt":"2022-08-16 16:36:41","casus":"Demo.","omschrijving":"Dit is een democase."} |
Mijn conclusie is dus dat dát werkt zoals het hoort. Echter, wanneer ik de selectie op de index-pagina wijzig, lijkt het of het script voor de call niet getriggerd wordt. Ik zie ook niets 'flikkeren' op beeld waardoor het idee dat er niets gebeurt versterkt. Daarom ben ik (vooral) aan het kijken naar de 1e regel van het call, en heb getest met verschillende waarden zoals ".change(function()" of "on('change', function()", data-waarden of verwerking van responses. Ik heb het script door een validator getrokken en daarin komen geen rare meldingen naar voren. Het weergeven van errors is ingeschakelt voor alles (E_ALL), maar geeft geen foutmeldingen terug. Ik weet ook zeker dat ik de juiste jquery aanroep, want andere afhankelijkheden daarvan werken wel.
Ik kan nu niet achterhaald waarom het niet werkt zoals het zou moeten. De onervarenheid met ajax zal vast een rol spelen, maar andere mogelijke oorzaken krijg ik met logisch beredeneren ook niet meer gevonden en daar heb ik even wat hulp nodig.
Waar zit nu de oorzaak van het niet updaten van de invoervelden bij het wijzigen van een selectie?