Я возвращаю JSON-кодированный массив: echo(json_encode($data));
от php, и я бы хотел, чтобы он заполнил поле подсказки из автозаполнения JQuery. Я использую это:
$("#field").autocomplete({ source : "SearchTest.php", maxLength: 5 });
Не знаю, почему это не работает. После каждого нажатия клавиши я получаю данные и заполняю поле предложения этими данными, я не хочу, чтобы автозаполнение сортировалось и выбиралось для меня, я делаю эту сторону сервера. Пока это список строк. Быть способным настроить, как данные будут представлены, было бы неплохо.
Изменить: Изменен источник для публикации:
$("#field").autocomplete({ source : function(request, response) { $.post("SearchTest.php", request, response); }, maxLength : 5 });
Получение этой ошибки сейчас:
Uncaught TypeError: Cannot use 'in' operator to search for '1240' in Notice: Undefined index: field in /.../SearchTest.php on line 25
Строка 25: $whatTheyWantToSearch = $_POST['field'];
Попробуйте использовать ajax
var searchRequest = null; $("#field").autocomplete({ maxLength: 5, source: function(request, response) { if (searchRequest !== null) { searchRequest.abort(); } searchRequest = $.ajax({ url: 'SearchTest.php', method: 'post', dataType: "json", data: {term: request.term}, success: function(data) { searchRequest = null; response($.map(data.items, function(item) { return { value: item.name, label: item.name }; })); } }).fail(function() { searchRequest = null; }); } });
Пример ответа JSON в SearchTest.php
<?php header('Content-type: application/json'); echo '{"items":[{"name":"Ashok"},{"name":"Rai"},{"name":"Vinod"}]}'; ?>
Демо-скрипт
Удаленная демонстрация JSONP
правильный формат json для этого из php:
<?php echo '[ {"name1":"val1"},{"name2":"val2"} ]'; ?>
Из js, означающего [] -файл объектов {}.
В моем случае для автосъемщика widjet это прекрасно работает:
$response="["; while($row = $res->fetch_assoc()){ if($response !="[")$response.=","; $response.='{"label":"'.$row["fio"].'","value":"'.$row["id"].'"}'; } $response.="]"; echo $response;
Возможно, что-то не так с параметром источника. Должно ли это быть «/Searchtest.php»?
Что-то вроде этого – лучший способ. json_encode все работает для вас.
$result = $_mysqli->query(...); $rs = array(); $pos = 0; while($row = $result->fetch_assoc()){ $rs[$pos]["n1"] = $row["n1"]; $rs[$pos]["n2"] = $row["n2"]; ... $rs[$pos++]["nn"] = $row["nn"]; } header('Content-type: application/json'); echo json_encode($rs);