[Moscow.pm] JS Object -> request params -> perl hash

Sergey Malochinskiy sergey.malochinskiy на gmail.com
Сб Июл 21 05:51:31 PDT 2012


В итоге решение такое. Задать preFilter для ajax запросов jQuery
  $.ajaxPrefilter(function(options, originalOptions, jqXHR) {
    //
    if (originalOptions.data && $.isPlainObject(originalOptions.data)) {
      options.contentType = 'application/json';
      options.data = JSON.stringify(originalOptions.data);
    }
  });

Теперь все запросы которые имеют в параметре data Object будут
сконвертированы в json.
Все. Теперь на стороне сервера получаем сразу красивый hash_ref из
$self->req->json
Красота. Спасибо.


21 июля 2012 г., 14:30 пользователь Sergey Malochinskiy
<sergey.malochinskiy на gmail.com> написал:
> Сервер отдает JSON потому, что модель CanJS ждет для модели на входе JSON.
> "can.Model is a can.Observe that connects to a RESTful interface."
> т.е. не смотря на заявленный RESTful никаких настроек дополнительных
> для модели нет.
> И POST и PUT оно делает именно через cgi-параметры.
> "It doesn't send json data. It sends form encoded data." - т.е. видимо
> возможен RESTful и без JSON в POST и PUT.
>
> В Mojolicious есть конечно возможность вытащить JSON из запроса(my
> $data = $self->req->json;), но в этом случае оно не работает.
> Возвращает undef. И собственно правильно делает... :)
>
> Само приложение это сложная админка для сайта. Поэтому в данном случае
> забота о других программистах постольку поскольку.
> Просто хочется все сделать единобразно и красиво.
> Почитал внимательно форум CanJS видимо все таки придется
> конвертировать в JSON на клиенте.
>
> Спасибо за то что натолкнули на правильное направление!
>
>
> 21 июля 2012 г., 13:53 пользователь Dmitry L. <dim0xff на gmail.com> написал:
>> 2012/7/21 Sergey Malochinskiy <sergey.malochinskiy на gmail.com>:
>>> Да я об этом думал, но в этом случае будет преобразование на
>>> клиенте... не хотелось бы. Сейчас все запросы делает клиентская
>>> библиотека (can.js) данные в модели, запросы сами отправляются при
>>> изменении модели и т.д.
>>> В принципе у меня есть решение по преобразованию на стороне клиента,
>>> но все таки хочется на стороне сервера...
>>>
>> Не совсем понятно почему ваш сервис отдаёт JSON, а получает просто параметры.
>>
>> Вы делаете сервис, и завтра могут появиться пользователи-программисты,
>> которые найдут ваш сервис интересным и захотят, к примеру, сделать
>> своё приложение для этого сервиса. И, я думаю, у них возникнет
>> закономерный вопрос - а почему так (это про JSON и cgi-параметры)?
>>
>> Если же это такая задумка, чтобы сервис обрабатывал и JSON и
>> cgiпараметры, то соответственно нужно писать де- и сериализаторы,
>> которые вероятно будут основываться на Content-Type входящего запроса.
>> Я к сожалению не пишу на Mojolicious, возможно там уже есть
>> соответствующие механизмы, об этом наверное нужно спросить в рассылке
>> mojolicious.
>> А относительно can.js - мне кажется там должны быть механизмы для
>> передачи JSON про сохранении/обновлении модели
>>
>>
>> --
>> //wbr, Dmitry L.
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
> --
> Best regards,
> Sergey Malochinskiy



-- 
Best regards,
Sergey Malochinskiy


Подробная информация о списке рассылки Moscow-pm