1. var jsonData = JSON.parse(data); не нужно. $.post умеет САМ преобразовывать данные в JSON. Обрати внимание на параметр dataType:
http://jquery.page2page.ru/index.php5/Ajax_запрос_методом_POST2. Данные, возвращаемые PHP-скриптом, должны иметь заголовок:
Content-Type: application/json
https://www.php.net/manual/ru/function.header.php3. Метод 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.phphttps://www.php.net/manual/ru/function.sqlsrv-query.phpпотому вставлять значение непосредственно в запрос - это классический говнокод и классическая же дыра в безопасности. Любой хакер-недоучка сможет организовать на твоём сайте SQL-инъекцию.
Константин ЕфименкоГуру (3721)
4 года назад
Я больше скажу, я проверил алертом и возвратом значения откуда брал. Оказалось что, если оставить как есть, то php ничего не возвращает, если убрать if (){} с php файла, то возвращает null.
$('.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>');
Но это просто не работает, ничего не происходит.
Помогите составить цикл, чтобы вывести данные.