jQuery ui автоматически заполняет с базой данных

Я довольно в новинку для 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 является пустой".

18
задан bigstylee 29 March 2010 в 13:26
поделиться

4 ответа

Наконец-то найдено решение, которое соответствует моим потребностям

$("#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;
  }
});
19
ответ дан 30 November 2019 в 08:15
поделиться

Строка JSON - это плоская строка, а map ожидает массив или массив, подобный структуре. попробуйте декодировать json в строке перед использованием карты.

0
ответ дан 30 November 2019 в 08:15
поделиться

Да, вам нужна информация заголовка для вашего 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 в порядке, за исключением отсутствующих данных заголовка

2
ответ дан 30 November 2019 в 08:15
поделиться

некоторые предложения:

  1. Почему dataType="jsop"? Это не похоже на jsonp. Я думаю, вам нужен "json".
  2. В опциях также вставьте cache : false. Это гарантирует, что запрос всегда выполняется и никогда не удовлетворяется из кэша браузера.
  3. проверьте, проходит ли звонок, с помощью чего-то вроде Fiddler или Charles.
  4. вызывается ли ваш success fn? У вас есть alert(). Вызывается ли он?
  5. если у вас есть Firebug или инструменты разработчика IE8, вы можете поставить точку останова на alert(), чтобы проверить значение параметров.
  6. Зачем указывать полное имя хоста в URL? Вчера вечером у меня возникла странная ситуация с автозаполнением, когда ответ был null, пустая строка, когда я использовал другое имя хоста для страницы и Ajax-запроса. Когда я изменил его, чтобы использовать то же имя хоста, запрос прошел успешно. На самом деле из-за политики одинакового происхождения в URL для вызова ajax не должно быть имени хоста вообще.
4
ответ дан 30 November 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: