Problemen met getJSON
ik weet niet of het thuis hoort in het PHP forum, dus alvast sorry als het niet zo is.
Ik ben in een hidden DIV aan het proberen om een selectie veld op te bouwen op basis van een selectie in een andere selectievak.
Ik krijg helaas mijn getJSON niet aan het werken.
Code (js)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript" charset="utf-8">
$(function(){
$("#mat_type").change(function(){
$.getJSON("select.php",{mat_type: $(this).val(), ajax:'true'}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
$("#mat_naam").html(options);
});
});
});
</script>
$(function(){
$("#mat_type").change(function(){
$.getJSON("select.php",{mat_type: $(this).val(), ajax:'true'}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
$("#mat_naam").html(options);
});
});
});
</script>
De code van mijn select.php file is :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
require_once('inc/mysql.class.php');
require_once('inc/global.inc.php');
session_start();
if (isset($_GET['mat_type'])) {
echo createoptions("materiaal" , "ID" , "Benaming" , "Type" , $_GET['mat_type'], $db);
}
function createoptions($table , $id , $field , $condition_field , $value , $db)
{
$sql = sprintf("select * from $table WHERE $condition_field=%d ORDER BY $field" , $value);
$res = $db->query($sql);
if ($res->size() > 0) {
while ($a = $res->fetch())
$out[] = "{optionValue: {$a[$id]}, optionDisplay: '$a[$field]'}";
return "[" . implode("," , $out) . "]";
} else
return "[{optionValue: -1 , optionDisplay: 'No result'}]";
}
?>
require_once('inc/mysql.class.php');
require_once('inc/global.inc.php');
session_start();
if (isset($_GET['mat_type'])) {
echo createoptions("materiaal" , "ID" , "Benaming" , "Type" , $_GET['mat_type'], $db);
}
function createoptions($table , $id , $field , $condition_field , $value , $db)
{
$sql = sprintf("select * from $table WHERE $condition_field=%d ORDER BY $field" , $value);
$res = $db->query($sql);
if ($res->size() > 0) {
while ($a = $res->fetch())
$out[] = "{optionValue: {$a[$id]}, optionDisplay: '$a[$field]'}";
return "[" . implode("," , $out) . "]";
} else
return "[{optionValue: -1 , optionDisplay: 'No result'}]";
}
?>
Als ik de functie uitvoer, dan gebeurt er eigenlijk niks. Mijn selectie veld wordt niet ingevuld.
Nochtans is de response dit :
[{optionValue: 31, optionDisplay: 'Afplakband Fineer'},{optionValue: 33, optionDisplay: 'Afplakband Fineer'},{optionValue: 30, optionDisplay: 'Afplakband Melamime'}]
Aangezien ik al gelezen had over problemen met de getJSON functie, probeerde ik het even met $.get.
Ik krijg nu even goed deze response terug :
[{optionValue: 31, optionDisplay: 'Afplakband Fineer'},{optionValue: 33, optionDisplay: 'Afplakband Fineer'},{optionValue: 30, optionDisplay: 'Afplakband Melamime'}]
Maar, op dat moment verandert de inhoud van mijn selectieveld WEL... helaas allemaal "undefined" values, maar er gebeurt tenminste wat.
Iemand enig idee wat ik mis doe ?
Vriendelijke groeten en alvast bedankt,
Davy
Even de javascript ook tussen de code-tags gezet.[/modedit]
Gewijzigd op 10/09/2013 22:02:02 door Nick Dijkstra
Frank, die zit er al in... Had alleen de belangrijke stukken code gecopieerd...
1: Omdat ik niet wist dat ik die $a daarna nog kon filteren.
2: Omdat ik de code zo als voorbeeld had gevonden online
3. Omdat ik de json_encode functie heel erg weinig terugvond in mijn Google zoektocht.
Hoe dan ook, jouw aanpassingen, hoe klein ook, hebben het probleem opgelost !
Ik ben ZOOOOOOOOOOOOOOOOO dankbaar... Daar zat ik nu al heel wat uren naar te zoeken...
Ik moet je echt eens mee nemen voor een goede pint ! :-)
Vriendelijke groeten en 10000x bedankt.
Davy
maar het was geen moeite hoor ;)
Toevoeging op 10/09/2013 22:01:30:
By the way,
gooi ook even netjes een JSON header er uit bovenin in select.php:
heb ik gedaan... Bedankt, ook voor deze tip...
Volgens mij had je al een pintje verdiend, dus deze komt er dan nog bij...
Ik heb nog zo veel vragen, maar leer zoveel bij van dit forum...
Groetjes,
Davy