2014-06-29 2 views
1

Utilisation des services REST avec Catalyst.Perl Catalyst Catalyst :: Controller :: REST avec HTML

Je peux obtenir une réponse renvoyée avec JSON, cependant, comment puis-je le faire si je voulais qu'un modèle HTML soit rendu. J'ai:

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; 

Et mon jQuery:

$(document).ready(function() { 

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

Il fonctionne si dataType est "JSON" parfaitement (Object {foo: "est vrai bar-y", certaines "données"}) , cependant, comment puis-je obtenir Catalyst pour retourner du HTML afin que jQuery puisse le placer. J'obtiens un message "415 (Unsupported Media Type)". Est-ce que je n'utilise pas le REST correctement?

Répondre

0

Si tout ce que vous voulez retourner est un code HTML prêt à être injecté dans votre page, vous risquez de le compliquer en tentant d'utiliser REST.

Je voudrais essayer de configurer cela comme une action régulière BEGIN { extends 'Catalyst::Controller' } et voir ce que vous obtenez en passant simplement au modèle et en supprimant l'appel $self->status_ok().

C'est certainement la façon dont j'ai construit les appels Catalyst AJAX qui retournent la sortie du template.

+0

Ahh oui, puis utilisez simplement la méthode décrite ci-dessus pour les appels JSON? Je viens de remarquer dans les documents qu'il mentionnait les types de contenu HTML, ce qui explique pourquoi je suivais ce chemin. Merci – user3308357

+0

Sauf si vous faites des actions REST appropriées, je ne serais pas enclin à ajouter 'Catalyst :: Controller :: REST' au mélange. C'est assez trivial pour retourner JSON sans lui: '$ c-> body (encode_json ($ c-> stash -> {foo}))' – RET