Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Json::XS + jquery.autocomplete


Автор: Vampir41k 17.6.2010, 23:23
Хотелось сделать автокомплит в поиске, делаем все это на perl + jquery. 
Перл скрипт исходя из того что ввели  в inpute достает из mysql подходящие данные (SELECT name FROM .... LIKE <данные из GET> LIMIT 5)
(в скуль запрос из гета строка попадает в нормалной кодировке и в результате запроса получаем масив искомых строк)
потом через Json::XS  кодируем и возращаем в  jquey.autocomplete("backend.pl"); 
Возникла проблема в том что данные которые будут подставляться на выходе получаются  кракозябрами вместо кириллицы
К сожалению именно в этот момент кинуть код не имею возможности, но хотелось бы увидеть хоть какие то мысли по этому поводу.
Посылки в гугль не принимаю - гуглил очень долго и безрезультатно...

зы пишем на Linux, БД и все остальное в UTF

Автор: gcc 18.6.2010, 02:53
Json::XS не много хитро  чем Json.pm

пробовали то что тут написано http://search.cpan.org/~mlehmann/JSON-XS-2.29/XS.pm
?

Попробуй в скрипте сделать отладочный вывод в консоль пришедшей строки и обработанной, перед отдачей клиенту. После этого станет понятно, где проблема и что копать дальше.


можно еще JSON::PP, он не медленнее и даже быстрее



Автор: Vampir41k 18.6.2010, 10:23
джава ($.getJSON ) получает такое  
 
[{"98452":"\u00d0\u0092\u00d0\u00b0\u00d1\u0085\u00d1\u0080\u00d1\u0083\u00d1\u0088\u00d0\u00b5\u00d0\u00b2\u00d0\u00b0"}]

а дает такое

user posted image

Судя по скрину число 23 прошло нормально и даже нашло соответствие в базе


Автор: gcc 18.6.2010, 10:47
попробуйте, так: 

Код

$value = Encode::decode ( 'utf8', $value );

Автор: Vampir41k 18.6.2010, 11:21
Код

webgetdat();
use URI::Escape;
$str = uri_unescape($FORM{text});
  @ulp=$hconfig{"main_db_type"}->db_getdata("StreetDB","name LIKE '".$str."%' limit 5","street_id,name");
#  @ulp=$hconfig{"main_db_type"}->db_getdata("DeviceDB","name LIKE '".$str."%' limit 5","dev_id,name");
  for (my $i=0;$i<int(@ulp);$i++){
      $wngroup{$ulp[$i][0]}=$ulp[$i][1];
#      print "$ulp[$i][0] - $ulp[$i][1]\n";
  }
print "Content-type: text/html  \r\n\r\n";
use JSON::XS;
my $json_xs = JSON::XS->new();
$json_xs->ascii(1);
$t=$json_xs->encode([{%wngroup}]);
print $t;



переменная $t это то что получает  jquery(

Автор: gcc 18.6.2010, 11:50
может быть так:

Код

use Encode;

 for (my $i=0;$i<int(@ulp);$i++){
      $wngroup{$ulp[$i][0]}=$ulp[$i][1];
$wngroup{$ulp[$i][0]} = Encode::decode ( 'utf8', $wngroup{$ulp[$i][0]});

#      print "$ulp[$i][0] - $ulp[$i][1]\n";
  }


PS: у меня такая проблема была, по-моиму она не так решается, хотя возможно я там что-то перепутал, я просто использовал JSON::PP или JSON

Автор: Vampir41k 18.6.2010, 11:51
Все тема закрыта,  бока были из за $json_xs->ascii(1);  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)