Perl DBI Query -> JSON -> JQuery AutoComplete - PullRequest
       2

Perl DBI Query -> JSON -> JQuery AutoComplete

0 голосов
/ 28 апреля 2011

Я пытался прочитать о том, как реализовать решение JSON, чтобы использовать Функция автозаполнения JQueryUI .Я пытаюсь использовать автозаполнение для поиска в базе данных по имени и после выбора заполнить идентификатор для скрытого объекта.Я видел множество примеров в Интернете, но не нашел лучшего способа реализовать это.База данных меняется не так часто, поэтому я не уверен, как лучше подходить к этой производительности.

Backend:

#!/usr/bin/perl 
use CGI;
use DBI;
use strict;
use warnings;

my $cgi = CGI->new;
my $dbh = DBI->connect('dbi:mysql:hostname=localhost;database=test',"test","test") or die $DBI::errstr;

my $sth = $dbh->prepare(qq{select id, name from test;}) or die
$dbh->errstr;
$sth->execute() or die $sth->errstr;
my $json = undef;
while(my @user = $sth->fetchrow_array()) {
   $json .= qq{{"$user[0]" : "$user[1]"}};
}

print $cgi->header(-type => "application/json", -charset => "utf-8");
print $json;

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Вам нужно захватить пакет JSON из CPAN вместо того, чтобы делать это:

my $json = undef;
while(my @user = $sth->fetchrow_array()) {
   $json .= qq{{"$user[0]" : "$user[1]"}};
}

Например, с JSON это будет выглядеть так:

use JSON;
my $json = {};
while(my @user = $sth->fetchrow_array()) {
   $json->{$user[0]} = $user[1];
}
print JSON::to_json($json);

Пакет JSON автоматически создаст допустимую строку JSON из любой предоставленной вами структуры данных Perl. Мы используем его повсюду на Мелодия , и это оказалось реальным спасением жизни для разумного преобразования структуры в действительный JSON.

1 голос
/ 09 мая 2011

Для автозаполнения jQuery необходимо поле «значение» или «метка», возвращаемое с результатом json.Если вы не включите его, автозаполнение jquery не будет работать:

Основные функции автозаполнения работают с результатами запроса, назначенными полям 'label' и 'value'.Объяснение полей 'label' и 'value' с сайта пользовательского интерфейса jQuery:

«Локальные данные могут быть простым массивом строк или содержать объекты для каждого элемента в массиве с меткойили значение свойства или оба.Свойство метки отображается в меню предложений.Значение будет вставлено в элемент ввода после того, как пользователь выберет что-то из меню.Если указано только одно свойство, оно будет использоваться для обоих, например.если вы предоставляете только значения-свойства, это значение также будет использоваться в качестве метки. ”

Ссылка на полный пример: http://www.jensbits.com/2011/05/09/jquery-ui-autocomplete-widget-with-perl-and-mysql/

0 голосов
/ 28 апреля 2011

Здесь я говорю о производительности.

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

Если ваша таблица базы данных действительно огромна, я предлагаю вам установить ЛИМИТ на результаты, которые вы получаете.Во-первых, чтобы избежать длительной обработки запросов, а также потому, что некоторые клиенты, такие как IE6, не очень быстро обрабатывают более сотни результатов (не говоря уже о том, что это не очень удобно для пользователя).

В проекте, использующем IE6,мы ограничили число возвращаемых элементов до 100. Если пользователь не может сократить поиск до 100 элементов, мы предполагаем, что он / она не знает, что он / она ищет.

Надеюсь, это немного поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...