Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не получается сформировать список через datalist. (jQuery + PHP)

Константин Ефименко Гуру (3721), на голосовании 5 лет назад
html:
<input type="text" class="Or-spc clear" id="myInput" list="Nms" />
<datalist id="Nms"></datalist>

jQuery:
$('.Or-spc').on('focus', function() {
var NumPr = $('.active').attr('data-kp');
$.post("ajax_sim.php", "spc-flt=" + NumPr, function (data) {
for (var i = 0; i < data.length; i++) {
var counter = data[i];
$('#Nms').html('<option value="'+data+'"></option>');
}
}, "json");
});

PHP:
if (isset($_POST['spc-flt'])) {
SpcFlt();
}
function SpcFlt() {
include('connect.php');
$NumPr = $_POST['spc-flt'];
$sql = ("SELECT ...FROM [MyDB] ORDER BY ...");
$stmt = sqlsrv_query($conn, $sql);
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$Kss = $row['...'];
$Nms = $row['...'];
$data = $Kss.' '.$Nms;
echo json_encode($data, JSON_UNESCAPED_UNICODE);
}
}

Мне необходимо динамически, в зависимости от критерия, формировать разный список в datalist. Причём число, которое я отправляю на php, как раз и отвечает за этот критерий.

Сейчас в datalist нечего не приходит, но ответ от ajax запроса есть. Если оставить как есть, но убрать json, то в datalist приходит весь список одной строкой. До сих пор, эта схема была идеальна для вывода в многострочный select, но для вывода в input + datalist явно не годится.

Как правильно вывести? Нужен ли тут json или это делается без него? Распишите свой ответ.
Дополнен 5 лет назад
Всё уже сам разобрался. Нужно было просто сформировать option(ы) сразу на PHP и вывести как есть:
$sql = ("SELECT ...FROM [MyDB] ORDER BY ...");
$stmt = sqlsrv_query($conn, $sql);
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$Kss = $row['...'];
$Nms = $row['...'];
$data = $Kss.' '.$Nms;
echo '<option value="'.$data.'"></option>';
}

$.post("ajax_sim.php", "spc-flt=" + NumPr, function (data) {
$('#Nms').html(data);
});
Голосование за лучший ответ
Senior Backend Developer Оракул (79869) 5 лет назад
header('Content-Type: application/json')?
Константин ЕфименкоГуру (3721) 5 лет назад
Зачем? В этом нет никакой необходимости (и никогда не было). В любом случае, я уже давно сам разобрался.

P.S.: То что я дополнил, это было необходимо, чтобы сделать простой вариант (без критериев).

Чтобы сделать по нормальному, нужно явно указать массив данных:
$data[] = $Kss.' '.$Nms;

PHP:
function SpcFlt() {
Заключить фильтрацию в if (условие) {Фильтр} else {Другой фильтр}
echo json_encode($data, JSON_UNESCAPED_UNICODE);
}

jQuery:
$.post("ajax_sim.php", "spc-flt=" + NumPr, function (data) {
$("#Nms").html(''); //Чтобы единожды очистить список (перед фильтрацией), а не каждый раз
for (var i = 0; i < data.length; i++) {
var counter = data[i];
$('#Nms').append('');
}
}, "json"); //Можно явно указать ожидаемый тип данных
Senior Backend Developer Оракул (79869) Как минимум затем, что всегда принято возвращать с данными правильный хедер, а возвращать json не как json, этой мягко сказать костыль.
Константин ЕфименкоГуру (3721) 5 лет назад
$('#Nms').append('<option value="'+counter+'"></option>');*
Похожие вопросы