getJSON возвращает значения, но не добавляет их в список

#php #jquery #ajax #getjson

#php #jquery #ajax #getjson

Вопрос:

у меня есть один запрос 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:

Ваш код 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 on $_GET['id'] . Или, что еще лучше, используйте подготовленные инструкции.