Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: jQuery autocomplete и кодировка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Polaris
Отправлено: 25 Марта, 2010 - 12:38:17
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




Проблема вроде достаточно распространенная, и читал уже много на эту тему, но никак не получается у меня. Суть в то, что надо организовать опережающий ввод текста, были выбраны jQuery (поскольку используется в проекте) и плагин к ней autocomplete.
Исходный проект достаточно старый и весь сделан в windows-1251. А jQuery, как я понял, понимает только utf.
Потому при вводе русских символов jQuery отдает кракозябры. Пробую в обработчике организовать конвертирование в windows-1251, тоже самое.

Обработчик autocomplete.php:

PHP:
скопировать код в буфер обмена
  1.  
  2. header('Content-type: text/html; charset=windows-1251');
  3. $q = $_GET['q'];
  4.  
  5. include("dbconnect.php");
  6.        
  7. if($result = $p_db->query ("select distinct name from street where name like '%$q%' order by name")) {
  8.         while($record = $result->fetch_row ())  {      
  9.                 echo iconv('utf-8', 'windows-1251', $record[0]).'\n';
  10.         }
  11.                
  12.         $result->free ();
  13. }
  14.        
  15. $p_db->close ();
  16.  


и сам джава-скрипт:


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function selectItem(li) {  
  3. }  
  4.  
  5. $(document).ready(function(){
  6.         $("#f_street").autocomplete("autocomplete.php", {
  7.                 delay:10,
  8.                 minChars:2,
  9.                 matchSubset:1,
  10.                 autoFill:true,
  11.                 matchContains:1,
  12.                 cacheLength:10,
  13.                 selectFirst:true,
  14.                 maxItemsToShow:10,
  15.                 onItemSelect:selectItem
  16.         });  
  17. });  
  18.  


f_street - это input, на который навешивается autocomplete.
Второй день туплю, буду благодарен за подсказки.
 
 Top
SAD
Отправлено: 25 Марта, 2010 - 14:29:58
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




сделай
PHP:
скопировать код в буфер обмена
  1. $q = $_GET['q'];
  2. $q = iconv('UTF-8', 'windows-1251', $q);


а тут убери
PHP:
скопировать код в буфер обмена
  1. echo iconv('utf-8', 'windows-1251', $record[0]).'\n';

(Отредактировано автором: 25 Марта, 2010 - 14:31:24)

 
 Top
JustUserR
Отправлено: 25 Марта, 2010 - 14:54:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Polaris пишет:
А jQuery, как я понял, понимает только utf
А сами JS-файлы сохранены в какой кодировке - тоже в windows-1251? И еще в самом JS-коде не используются ли функци escape/unescape - они ведь работют именно с юникодным текстом


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Polaris
Отправлено: 26 Марта, 2010 - 07:05:47
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




SAD
Спасибо, так действительно работает.
Есть один момент - мне интересно, насколько верно с точки зрения нагрузки на сервер в autocomplete.php каждый раз открывать и закрывать соединение с базой? Смотрю top'ом нагрузку - несколько скачет, несущественно правда...
 
 Top
Darksynx
Отправлено: 26 Марта, 2010 - 09:39:39
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Polaris пишет:
SAD
Спасибо, так действительно работает.
Есть один момент - мне интересно, насколько верно с точки зрения нагрузки на сервер в autocomplete.php каждый раз открывать и закрывать соединение с базой? Смотрю top'ом нагрузку - несколько скачет, несущественно правда...


Чтобы снизить нагрузку:
1. Сделайте индекс в таблице для поля, по которому идёт поиск. В данном случае нагрузка сократится в разы.
2. Посмотрите в сторону кэширования. Можно даже memcached.

(Отредактировано автором: 26 Марта, 2010 - 09:40:25)

 
 Top
JustUserR
Отправлено: 26 Марта, 2010 - 12:02:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Polaris пишет:
Каждый раз открывать и закрывать соединение с базой?
На самом деле это сильно неоптимизированное решение потому что именно соединение с базой занимает самое большое время - по крайней мере по сравнению с выполнением несложного запроса


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Polaris
Отправлено: 26 Марта, 2010 - 12:23:37
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




Darksynx пишет:
Сделайте индекс в таблице для поля, по которому идёт поиск. В данном случае нагрузка сократится в разы


В данном случае я выбираю из view, а создание индексов на них вроде невозможно, только на базовую таблицу. А если в базовой таблице записей в десятки раз больше, имеет ли смысл создавать в ней индекс на искомое поле?

JustUserR пишет:
На самом деле это сильно неоптимизированное решение потому что именно соединение с базой занимает самое большое время - по крайней мере по сравнению с выполнением несложного запроса


А как лучше поступить? Можно ссылку или наводку хотя бы?

В принципе, проект не сказать чтобы сильно посещаемый, но хочется на будущее уметь.
 
 Top
JustUserR
Отправлено: 26 Марта, 2010 - 15:07:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Polaris пишет:
А как лучше поступить? Можно ссылку или наводку хотя бы?
В принципе, проект не сказать чтобы сильно посещаемый, но хочется на будущее уметь.
Да об оптимизации лучше задуматься заранее Улыбка
Как вариант можно попробовать создать непрервыное JS-соединение (При условии статичности страницы и достаточной частоты запросов Улыбка с PHP-скриптом котрый в свою очередь будет держать соединение с базой данных Тут важно найти баланс - вам более важно иметь возможность поддерживать частоту запросов от одного пользователя ини наоборот
Нечто похожее реализовано здесь http://dklab[dot]ru/lib/dklab_realplexor/


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB