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

Как парсить массив данных через JSON?

Мастер (1289), закрыт 1 месяц назад
У меня есть многострочный select, в котором нужно вывести отфильтрованный список option. Здесь jquery берёт критерий фильтрации из input, и методом POST отправляет на php, ожидая ответа.
$('.Or-fio').on('keypress', function(e) {
if (e.which == 13) {
var fio = $('.Or-fio').val();
$.post("fio.php", "fio-str=" + fio, function (data) {
var jsonData = JSON.parse(data);

}
});
e.preventDefault();
}
});

Здесь мы фильтруем нужные данные и получаем массив, который в виде строки отправляем обратно на js.
$fiostr = $_POST['fio-str'];
$sql = ("SELECT FIO FROM [MyBD] WHERE Fam = '$fiostr' OR Imy = '$fiostr' OR Otch = '$fiostr' ORDER BY Fam");
if ($stmt = sqlsrv_query($conn, $sql)) {
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$data[] = $row;
}
echo json_encode($data, JSON_UNESCAPED_UNICODE);
}

Я пытался делать что-то вроде:
for (var i = 0; i < jsonData.counters.length; i++) {
var counter = jsonData.counters[i];
$('.left').html('<option data-num="" value="'+counter+'">'+counter+'</option>');
Но это просто не работает, ничего не происходит.

Помогите составить цикл, чтобы вывести данные.
Лучший ответ
http://jquery.page2page.ru/index.php5/Ajax_запрос_методом_POST

2. Данные, возвращаемые PHP-скриптом, должны иметь заголовок:
Content-Type: application/json
https://www.php.net/manual/ru/function.header.php

3. Метод html ПЕРЕЗАПИСЫВАЕТ содержимое элемента. В результате выполнения в цикле $('.left').html(...) у тебя в .left окажется ОДИН option - который был в массиве последним. Чтобы ДОБАВЛЯТЬ элементы, надо использовать:
http://jquery.page2page.ru/index.php5/Добавление_содержимого_в_конец_элементов

4. jsonData у тебя имеет формат: [{FIO: "aaa"}, {FIO: "bbb"}, ..] - простой массив объектов. В нём НЕТ никаких counters. Именно такие данные ты формируешь своим PHP-скриптом.

5. Библиотека sqlsrv УМЕЕТ работать с подготовленными запросами:
https://www.php.net/manual/ru/function.sqlsrv-prepare.php
https://www.php.net/manual/ru/function.sqlsrv-query.php
потому вставлять значение непосредственно в запрос - это классический говнокод и классическая же дыра в безопасности. Любой хакер-недоучка сможет организовать на твоём сайте SQL-инъекцию.
Комментарий удален
Андрей Искусственный Интеллект (124680) Проверять надо НЕ alert'ом. Нажимаешь в браузере F12 и на вкладке сеть/network смотришь, какой запрос оправляется на сервер и какие данные сервер возвращает браузеру.
Комментарий удален
Остальные ответы
Комментарий удален
Татьяна Шеховцова Искусственный Интеллект (158847) Так понимать надо, что пишешь. У тебя никакого counters нет
Похожие вопросы
Также спрашивают