Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Mojolicious возврат JSON 
:(
    Опции темы
Jops
Дата 21.10.2013, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 31.1.2013

Репутация: нет
Всего: нет



Доброго времени! Кто сталкивался с пободным, подмогите.
JSON приходит пустой. В консоле видна строка типа "Content-Type: application/json Status: 200 OK Date: Mon, 21 Oct 2013 05:11:38 GMT Content-Length: 2 []"
Если пустить в браузере путь с параметрами, то выводит то же самое, но со полным JSON`ом.
Если точнее, то не могу правильно сформировать render. Возвращается заголовок с данными тупо как текст. Подскажите, кто знает.

Код

#!/usr/bin/perl
use feature qw(switch say);
use Mojolicious::Lite;
use Net::Address::IP::Local;
use Mojo::Date;
use Mojo::URL;
use DBI;
use Date::Parse;
use utf8;
use CGI ;

my $host = '*';
my $port = '*';
my $dbname = "*";
my $user = "*";
my $pass = "*";
my $head = new CGI;
    print $head->header( -type=>'text/html', -charset=>'utf-8');

my $dbh = DBI->connect("DBI:Pg:dbname=$dbname;host=$host;port=$port;", $user, $pass) || die $DBI::errstr;
   $dbh->{pg_enable_utf8} = 1;
    

my $ip = Net::Address::IP::Local->public;
my $query = $dbh->prepare("SELECT otime FROM account.log0 WHERE ip='$ip' ORDER BY id DESC LIMIT 1");

   $query->execute() or die "Error select from database";
if($query->rows){
      my($otime) = $query->fetchrow_array();
      $query->finish;
      unless (!$otime) {
        print "{\"error\": \"Вы не авторизованы!\"}";
        exit;
       }
    }

any '/' => sub {
    my $mode = $head->param('m');
    if(!$mode || ($mode eq '')) {die;}

    given ($mode) {
        when ("vpn") {
            my $self = shift;
            my $uid = $self->param('uid');
            my $stime = $self->param('stime');
            my $etime = $self->param('etime');

            my $q = $dbh->prepare("SELECT to_char(start_s, 'YYYY-MM-DD HH24:MI:SS') start_s, 
                                        to_char(end_s, 'YYYY-MM-DD HH24:MI:SS') end_s, extip, intip, 
                                        CASE WHEN protocol=0 THEN 'PPTP' ELSE 'L2TP' END prot, ugroup
                            FROM getonline_gg($uid, unix_timestamp('$stime'), unix_timestamp('$etime'))");
            $q->execute();
            if($q->rows){
                  
                my ($row, @vpn);
                my $priority = 0;

                while($row = $q->fetchrow_hashref()) { push(@vpn,$row); }
                $q->finish;
                $self->stash(json => \@vpn);
                $self->render();
                }else{
                    print "{\"error\": \"Информации нет!\"}";
                    exit;
                }
        }
        default {
          print "{\"error\": \"Ошибка запроса!\"}";
        exit;
            }
    }

    
};
app->start;



Это сообщение отредактировал(а) Jops - 21.10.2013, 09:59
PM MAIL   Вверх
Zadnica
Дата 21.10.2013, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 18.10.2013

Репутация: нет
Всего: нет



людям делать нечего кроме как читать ваш километровый скрипт
PM MAIL   Вверх
Jops
Дата 21.10.2013, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 31.1.2013

Репутация: нет
Всего: нет



Если 75 строк для вас много, то ...)

А вообще проблема в строке 60-61.
PM MAIL   Вверх
Grost
Дата 22.10.2013, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 26.8.2010
Где: Москва

Репутация: нет
Всего: нет



Может так?
Код

#                $self->stash(json => \@vpn);
#                $self->render();
                $self->render(json => \@vpn);


Цитата

Возвращается заголовок с данными тупо как текст

Это что значит? Покажите тогда ответ.

Да и вы вроде сами заставляете его отдавать текст
Код

my $head = new CGI;
    print $head->header( -type=>'text/html', -charset=>'utf-8');


И может кто рассказать, зачем вместе в фраемворком использовать CGI?
PM MAIL ICQ   Вверх
Jops
Дата 23.10.2013, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 31.1.2013

Репутация: нет
Всего: нет



Цитата

И может кто рассказать, зачем вместе в фраемворком использовать CGI? 

Это пробное) Заголовки беру из Mojo::Headers (разные варианты перебирал в процессе построения и просто на этом остановился пока)

Вообще решение было очевидным. По тупости не понял сразу. Надо было просто в демоне файл запустить
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.