#php #jquery #mysql #jquery-ui
#php #jquery #mysql #jquery-пользовательский интерфейс
Вопрос:
Я играю с небольшим окном сообщения и пытаюсь включить функцию автозаполнения в jquery UI, но это не работает. Ничего не заполняется автоматически. вот что у меня пока есть…
composemessage.php
<script>
$(function() {
$( "#tags" ).autocomplete({
source: "usersarray.php",
dataType:'json',
minLength: 0,
delay:0
});
$( "#tags" ).click(function() {
$( "#tags" ).autocomplete("search","");
});
});
</script>
usersarray.php
$id = $_SESSION['account_id'];
$getmsg = "SELECT * FROM user WHERE account_id = $id";
$showmsg = @mysqli_query ($dbc, $getmsg);
while ($row = mysqli_fetch_array($showmsg, MYSQLI_ASSOC)) {
$arrResults = array($row['user_username']);
} // END WHILE
// Print them out, one per line
echo json_encode($arrResults);
Комментарии:
1. @user отправляет ли он ajax-запрос? Вы пробовали перейти к вашему usersarray.php непосредственно, чтобы увидеть, действительно ли оно печатает имена пользователей, которые вы ожидаете?
2. У меня есть — и проблема заключается в том, как я получаю этот массив, потому что он вообще не выводит массив на печать.
3. И да, запрос ajax работает, когда я вручную ввожу массив не из запроса mysql
4. если автозаполнение работает при использовании массива вместо запроса к БД в php-файле, попробуйте отладить свой php-код.
5. спасибо — есть предложения относительно того, как это сделать?
Ответ №1:
Результаты JSON должны выглядеть примерно так:
users = ['user1', 'user2'];
Основываясь на вашем запросе jquery, вы ожидаете что-то в этом формате. Можете ли вы показать нам, что выводится из вашего usersarray.php файл? Не забудьте замаскировать имена пользователей, если они важны для вас.
Комментарии:
1. вычеркните это — извините, там написано «null»
2. Тогда, я думаю, на этом этапе вам нужно заставить ваш запрос работать. Вместо
SELECT * ...
используйтеSELECT username ...
. Предпочтительнее быть более явным при выборе имен полей. Убедитесь, что в базе данных есть записи в этой таблице. Убедитесь, что ваш вызов$row['fieldName']
совпадает сSELECT fieldName
… что бы это ни было. Начнем с этого, я думаю.3. Также распечатайте свое
$id
и убедитесь, что у вас есть ожидаемое значение там.
Ответ №2:
Json должен быть в этом формате:
[{label: 'label1', value: 'value1'},{label: 'label2', value: 'value2'},{label: 'label3', value: 'value3'}];
Часть javascrip:
$( "#tags" ).autocomplete({
source: function( request, response ) {
var term = request.term;
$.ajax({
url: "username.php",
dataType: 'json',
async: true,
data: request,
timeout: 3000,
success: function(data,status,xhr){
response( data );
}
});
},
delay: 100,
minLength: 0
});
HTML
<input name="username" class="detailedViewTextBox suggest_hidden" id="tags" autocomplete='off' value="" type="text" size="18">
Комментарии:
1. Хорошо — итак, как мне отформатировать мой запрос PHP / mysql, чтобы перевести его в формат json?
2. Я выбираю этот способ вызова ajax для возможности настройки асинхронного режима и времени ожидания.
3. Ваш запрос может быть таким, тогда задание выполняет ассоциативный массив: $ sql=»выберите имя пользователя в качестве значения, имя пользователя в качестве метки от пользователя, где имя пользователя, подобное ‘$ term%’, ограничено 10″