автоподсказка jQuery

Я новичок в jQuery, поэтому мне нужна помощь: я только начал использовать jQuery Autosuggest Plugin, потому что я бы действительно помог своему сайту. Я загрузил все файлы, связал их со своим сайтом и использовал это, чтобы установить ввод как автозаполнение:

<script>
$(document).ready(function(){
    $("#postna").autoSuggest("get.php");
})
</script>

Теперь эта часть работает нормально, она меняет стиль моего поля ввода. Что касается файла get.php, я в значительной степени скопировал его с сайта плагина, но изменил его, чтобы он служил мне лучше:

<?php
require_once 'includes/mysql.class.php';

$input = $_GET['q'];
$data = array();

$qu = new MySQL();
$qu->rQuery("SELECT id,name FROM cities WHERE name LIKE '$input%'");
$data = $qu->getRows();
foreach($data as $a){
    $json = array();
    $json['value'] = $a['id'];
    $json['name'] = $a['name'];
    $data[] = $json;
}
header("Content-type: application/json");
echo json_encode($data);
?> 

Теперь проблема в том, что когда я ввожу свой текст, он возвращает «Результаты не найдены», но если я перехожу к /get.php?q=velenje (velenje — это название города), он повторяет это:

{"id":"681","name":"Velenje"}

Любое предложение о том, что я могу делать неправильно?


person Gregor Menih    schedule 21.10.2011    source источник
comment
Можете ли вы запустить Fiddler (fiddler2.com/fiddler2) и опубликовать то, что отправлено и получено в/ с сервера?   -  person Brad    schedule 21.10.2011
comment
каков результат get.php, если вы вставите адрес вручную?   -  person Tim    schedule 21.10.2011
comment
@Brad, GET кажется правильным: GET /get.php?q=velenje HTTP/1.1; спасибо за программу, я искал что-то менее сложное, чем WireShark. @ Тим, это эхо {"id":"681","name":"Velenje"}   -  person Gregor Menih    schedule 21.10.2011


Ответы (2)


Вы извлекаете результаты своего запроса MySQL в массив $data, а затем продолжаете редактировать этот массив в цикле. Попробуй это:

$data = array();
$qu = new MySQL();
$qu->rQuery("SELECT id,name FROM cities WHERE name LIKE '$input%'");
$rows = $qu->getRows();
foreach($rows as $a){
    $json = array();
    $json['value'] = $a['id'];
    $json['name'] = $a['name'];
    $data[] = $json;
}    
header("Content-type: application/json");
echo json_encode($data);

EDIT: я забыл отметить, что вы, похоже, не дезинфицируете свои входные данные... Маленький Bobby Tables показывает нам, почему этого делать не следует.

person thetaiko    schedule 21.10.2011
comment
Это тоже не работает. Кроме того, это всего лишь тестовый скрипт, чтобы все заработало. Я планирую исправить проблемы с безопасностью позже. - person Gregor Menih; 21.10.2011
comment
@Grega. Если вы используете Chrome, откройте инструменты разработчика и посмотрите, что на самом деле загружается. Вы также можете увидеть, возникают ли какие-либо ошибки javascript. В Firefox есть что-то похожее, но вам может потребоваться загрузить расширение. - person thetaiko; 21.10.2011
comment
Я уже проверил, все необходимые скрипты загружаются, ошибок не видно. - person Gregor Menih; 21.10.2011
comment
На вкладке «Сеть» вы можете увидеть файл get.php и его содержимое? - person thetaiko; 21.10.2011
comment
Да, но хоть я и ввожу в ввод город, я вижу все города вот так: 0: {value:452, name:Ljubljana}. Также много запросов на search.php (файл, в котором я нахожусь). Это неправильно? - person Gregor Menih; 21.10.2011
comment
Хммм - я не уверен, почему, но похоже, что json_encode возвращает объект, а не массив. Возвращаемое значение должно выглядеть как [{value:452,name:Ljubljana},...], а не {0:{value:452,name:Ljubljana}}. - person thetaiko; 21.10.2011
comment
Да, я редактировал get.php и забыл установить для $input значение $_GET['q']; Теперь он возвращает это: [{"value":"681","name":"Velenje"}] или больше результатов, если я не закончил вводить его. Но все равно не работает... - person Gregor Menih; 21.10.2011
comment
Хммм, если javascript срабатывает, данные загружаются и ошибок нет, у меня нет идей... извините - person thetaiko; 21.10.2011
comment
Что ж, вы очень помогли. Я посмотрю, смогу ли я это исправить, или я буду использовать что-то еще... - person Gregor Menih; 21.10.2011
comment
Не уверен, что это вас заинтересует, но я, наконец, исправил это! Очевидно, мне пришлось добавить, какие объекты я хочу отображать! searchObjProps:"name", selectedItemProp:"name" - person Gregor Menih; 21.10.2011

Используйте на стороне клиента полный путь к вашему скрипту:

<script>
$(document).ready(function(){
    $("#postna").autoSuggest("http://yoursite.com/get.php");
})
</script>
person Patrick Desjardins    schedule 21.10.2011