Я довольно в новинку для JQuery и возможно пытающийся достигнуть чего-то, что могло бы быть немного более трудно для новичка. Однако я пытаюсь создать автоматическое заполнение, которое отправляет текущее значение в Сценарий PHP и затем возвращает необходимые значения.
Вот мой код JavaScript
$("#login_name").autocomplete({
source: function(request, response) {
$.ajax({
url: "http://www.myhost.com/myscript.php",
dataType: "jsonp",
success: function(data) {
alert(data);
response($.map(data, function(item) {
return {
label: item.user_login_name,
value: item.user_id
}
}))
}
})
},
minLength: 2
});
И вот последняя половина "myscript.php"
while($row = $Database->fetch(MYSQLI_ASSOC))
{
foreach($row as $column=>$val)
{
$results[$i][$column] = $val;
}
$i++;
}
print json_encode($results);
Который производит следующий вывод
[{"user_id":"2","user_login_name":"Name1"},{"user_id":"3","user_login_name":"Name2"},{"user_id":"4","user_login_name":"Name3"},{"user_id":"5","user_login_name":"Name4"},{"user_id":"6","user_login_name":"Name5"},{"user_id":"7","user_login_name":"Name6"}]
Кто-либо может сказать мне, где я иду не так, как надо? Запуск быть вполне разбитым. Поле ввода просто становится "белым", и никакие варианты не показываются. Код действительно работает, если я указываю массив значений.
ОБНОВЛЕНИЕ я изменил код на и все еще имеющий удачу.
$("#login_name").autocomplete({
source: "/ajax/login_name.php",
dataType: "json",
minLength: 2,
cache: false,
select: function(event, ui) {
alert(ui);
}
});
Используя инструмент Web Developer FireFox, я добираюсь, ошибка "b является пустой".
Наконец-то найдено решение, которое соответствует моим потребностям
$("#login_name").autocomplete({
source: function(request, response){
$.post("/ajax/login_name.php", {data:request.term}, function(data){
response($.map(data, function(item) {
return {
label: item.user_login_name,
value: item.user_id
}
}))
}, "json");
},
minLength: 2,
dataType: "json",
cache: false,
focus: function(event, ui) {
return false;
},
select: function(event, ui) {
this.value = ui.item.label;
/* Do something with user_id */
return false;
}
});
Строка JSON - это плоская строка, а map ожидает массив или массив, подобный структуре. попробуйте декодировать json в строке перед использованием карты.
Да, вам нужна информация заголовка для вашего json
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
header("Cache-Control: no-cache, must-revalidate" );
header("Pragma: no-cache" );
header("Content-type: text/x-json");
и tvanfosson - хороший аргумент в отношении плагин
в любом случае я не думаю, что вы делаете вызов ajax, который делает плагин.
если вы действительно используете jquery-ui autocomple , вам следует прочитать документацию, чтобы запустить базовую версию. ваш php в порядке, за исключением отсутствующих данных заголовка
некоторые предложения:
dataType="jsop"
? Это не похоже на jsonp. Я думаю, вам нужен "json". cache : false
. Это гарантирует, что запрос всегда выполняется и никогда не удовлетворяется из кэша браузера. alert()
. Вызывается ли он? alert()
, чтобы проверить значение параметров.