【问题标题】:Perl Catalyst Catalyst::Controller::REST with HTMLPerl Catalyst Catalyst::Controller::REST with HTML
【发布时间】:2014-06-29 15:36:03
【问题描述】:

尝试将 REST 服务与 Catalyst 一起使用。

我可以得到一个用 JSON 发回的响应,但是,如果我想要一个 HTML 模板被呈现,我该怎么做。我有:

    package MM::Controller::User::Test;
    use Moose;
    use namespace::autoclean;

   BEGIN { extends 'Catalyst::Controller::REST' }

   sub thing : Local : ActionClass('REST') { }

   sub thing_GET {
      my ( $self, $c ) = @_;

      # Return a 200 OK, with the data in entity
      # serialized in the body
      $c->{stash}->{template} = "a.tt";

      $self->status_ok(
           $c,
           entity => {
               some => 'data',
               foo  => 'is real bar-y',
           },
      );
   }


   1;

还有我的 jQuery:

   $(document).ready(function() {

     $.ajax({
        type    : "GET",
        url     : "/user/test/thing",
        data    : {},
        dataType: "html",
        success : function(data, textStatus) {
          console.log(data);
        }
      });
    });

如果 dataType 完美地是“json”(Object {foo: "is real bar-y", some: "data"}),它可以工作,但是,我如何让 Catalyst 返回一些 HTML 以便 jQuery 可以放置它。我收到“415(不支持的媒体类型)”消息。我只是没有正确使用 REST 吗?

【问题讨论】:

    标签: perl catalyst


    【解决方案1】:

    如果您想要返回的只是一些准备好注入页面的 HTML,那么您也可能因为尝试使用 REST 而过于复杂。

    我会尝试将其配置为常规操作 BEGIN { extends 'Catalyst::Controller' },然后只需将其移交给模板并删除 $self->status_ok() 调用,看看您会得到什么。

    这当然是我构建返回模板输出的 Catalyst AJAX 调用的方式。

    【讨论】:

    • 啊,是的,然后只使用我上面概述的方法进行 JSON 调用?我刚刚在文档中注意到它提到了 HTML 内容类型,这就是我走这条路的原因。谢谢
    • 除非您正在执行正确的 REST 操作,否则我不会倾向于将 Catalyst::Controller::REST 添加到组合中。没有它就可以返回 JSON:$c->body(encode_json($c->stash->{foo}));
    猜你喜欢
    • 1970-01-01
    • 2013-05-25
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多