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"}] 

Может ли кто-нибудь сказать мне, где я ошибаюсь, пожалуйста? Начинаю расстраиваться. Коробка ввода просто превращается в «белый», и никаких параметров не отображается. Код работает, если я задаю массив значений.

UPDATE Я изменил код и до сих пор не повезло.

 $("#login_name").autocomplete({ source: "/ajax/login_name.php", dataType: "json", minLength: 2, cache: false, select: function(event, ui) { alert(ui); } }); 

Используя средство веб-разработчика FireFox, я получаю сообщение об ошибке «b имеет значение null».

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

     $("#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; } }); 

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

    1. Почему dataType= "jsop" ? Это не похоже на jsonp. Я думаю, вы хотите «json».
    2. вставьте cache : false в параметры. Это гарантирует, что запрос всегда выполняется и никогда не выполняется из кеша браузера.
    3. проверьте, выходит ли звонок, с чем-то вроде Скрипача или Чарльза.
    4. ваш вызов fn вызван? У вас есть alert() . Вызывается ли это?
    5. если у вас есть средства разработки Firebug или IE8, вы можете поместить контрольную точку в alert() чтобы проверить значение параметров.
    6. Зачем указывать полное имя хоста в URL? Вчера вечером у меня была странная ситуация с автозаполнением, где ответ был пустым, пустая строка, когда я использовал другое имя хоста для страницы и запрос Ajax. Когда я изменил его, чтобы использовать одно и то же имя хоста, запрос выполнился. Фактически из-за той же политики происхождения, у вас не должно быть никакого имени хоста в URL-адресе для вызова ajax.

    Да, вам нужна информация заголовка для вашего json

      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); header("Last-Modified: " . gmdate( "D, d MYH:i:s" ) . "GMT" ); header("Cache-Control: no-cache, must-revalidate" ); header("Pragma: no-cache" ); header("Content-type: text/x-json"); 

    и tvanfosson отлично подходит к штепсельной вилке

    в любом случае я не думаю, что вы делаете вызов ajax, который делает плагин.

    если вы используете infactom с помощью jquery-ui autocomple, вы должны прочитать документацию, чтобы получить базовую версию. ваш php отлично от недостающих данных заголовка

    Если кому-то это понадобится:

    Документация для автозаполнения в пользовательском интерфейсе jQuery указывает, что параметр querystring для использования – это « термин », а не «q» … или, как минимум, сейчас.

     Eg http://www.myhost.com/myscript.php?term=someToSearchFor 

    Простой Jquery ui autocomplete, для тех, кому это может понадобиться.

     //select data from the table $search = $db->query('SELECT Title from torrents'); //then echo script tags and variables with php <?php echo '<script type="text/javascript"> $(function() { var availableTags = ['; foreach ($search as $k) { echo '"'.$k['Title'].'",'; } echo ']; $( "#tags" ).autocomplete({ minLength:2, //fires after typing two characters source: availableTags }); }); </script>'; ?> 

    Ваша html-форма

     <div id="search"> <form id="search-form"> <input id="tags" type="text" /> <input type="submit" value="Search" /> </form> </div> 

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

    У меня тоже была такая проблема. И теперь я это исправлю. Проблема заключается в том, что мой json, возвращающийся с моего сервера, содержит синтаксическую ошибку.

    В http://api.jquery.com/jQuery.getJSON/ указано, что если в JSON есть некоторая ошибка, он будет терпеть неудачу. JSON должен соответствовать стандарту JSON здесь http://json.org/ .

    Для моей ошибки моя строка в JSON обертывается только одной цитатой. Но стандарт JSON принимает только строку, которая переносится в двойные кавычки.

    например. «Hello World» не «Hello World»

    Когда вы его исправите, вы можете установить источник как строковый URL. Этот термин будет в строке запроса «term». И это работает!