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