Как использовать jquery для автозаполнения имен пользователей для приложения для обмена сообщениями?

#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″