getJSON возвращает значения, но значения не добавляются в список - PullRequest
0 голосов
/ 09 апреля 2011

у меня есть один запрос getJSON, который возвращает правильные значения, но не добавляет в список

вот код

<script type="text/javascript"> 
$(document).ready(function() {
$("select#make").change(function(){
$('div.data_loading').fadeIn();
$.getJSON("getmod.php",{id: $(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>';
     }
    $("select#vmod").html(options);
    $('div.data_loading').hide();  
   });
})  

})

</script>

Ниже приведены значения, возвращаемые из getmod.php

[{optionValue:13, optionDisplay:156},{optionValue:14, optionDisplay:164},{optionValue:15, optionDisplay:166},{optionValue:16, optionDisplay:GTV-6},{optionValue:17, optionDisplay:Spark},{optionValue:18, optionDisplay:Spider},{optionValue:19, optionDisplay:Graduate},{optionValue:20, optionDisplay:Quadrifoglio},{optionValue:21, optionDisplay:Milano},]

вот поле выбора

<select name="vmod" id="vmod" >
</select>

ниже мой php файл, который возвращает JSON

$id=$_GET['id'];
$sql="select mname,mod from modl where mkd=".$id;
$result=mysql_query($sql);
echo "["; 
for($i=1;$i<=mysql_num_rows($result);$i++)
{
$row=mysql_fetch_array($result);
echo "{optionValue:".$row['mod'].", optionDisplay:". $row['mname']."}";
echo ",";
}
echo "]";

1 Ответ

4 голосов
/ 09 апреля 2011

Ваш код JavaScript выглядит нормально.

Это точный ответ с сервера?Тогда ваш JSON недействителен.Строковые значения и ключи должны быть заключены в двойные кавычки (я также не уверен насчет запятой).Вставьте сюда свой JSON и протестируйте его.Также взгляните на http://json.org/.

Это было бы правильно:

[{"optionValue":13, optionDisplay:156},
 {"optionValue":16, "optionDisplay":"GTV-6"}]

Это похоже на то, что вы построили строку JSON вручную (с использованием конкатенации строк и цикла).Не делайте этого, используйте json_encode.

Обновление: Вот как это должно быть:

$results = array();

while(($row = mysql_fetch_assoc($result))) {
    $results[] = $row;
}

echo json_encode($results);

Также обратите внимание, что ваш код подвержен атакам SQL-инъекций.Вы должны использовать mysql_real_escape_string на $_GET['id'].Или лучше использовать подготовленные заявления.

...