[Catalyst] DELETE through REST and Jemplate

Emmanuel Quevillon tuco at pasteur.fr
Tue Mar 31 09:29:52 BST 2009


J. Shirley wrote:
> On Mon, Mar 30, 2009 at 10:31 AM, Emmanuel Quevillon <tuco at pasteur.fr
> <mailto:tuco at pasteur.fr>> wrote:
> 
>     J. Shirley wrote:
> 
>         On Mon, Mar 30, 2009 at 7:39 AM, Emmanuel Quevillon
>         <tuco at pasteur.fr <mailto:tuco at pasteur.fr>
>         <mailto:tuco at pasteur.fr <mailto:tuco at pasteur.fr>>> wrote:
> 
>            J. Shirley wrote:
>            > On Mon, Mar 30, 2009 at 7:24 AM, Emmanuel Quevillon
>            <tuco at pasteur.fr <mailto:tuco at pasteur.fr>
>         <mailto:tuco at pasteur.fr <mailto:tuco at pasteur.fr>>
>            > <mailto:tuco at pasteur.fr <mailto:tuco at pasteur.fr>
>         <mailto:tuco at pasteur.fr <mailto:tuco at pasteur.fr>>>> wrote:
>            >
>            >     Hi,
>            >
>            >     I am playing with REST and Jemplate from the great Tuts
>         from
>            JRock's
>            >     book.
>            >     However, I am facing a problem. I understand well how to
>            retrieve
>            >     data from a REST url and playing Ajax with it, by a GET
>         method.
>            >     However, I don't know how to change the method to
>         DELETE from a
>            >     simple link like:
>            >
>            >     test.js contains:
>            >
>            >     function remove_item(id){
>            >      Jemplate.process('test.tt2',
>            >                      '[% Catalyst.uri_for("/rest/item/")
>         %]'+id,
>            >                      '#_item');
>            >     }
>            >
>            >     template test.tt2:
>            >
>            >     <a href="#" onclick="remove_item('[% item.id
>         <http://item.id>
>            <http://item.id> <http://item.id> %]');
> 
>            >     return
>            >     false;">Remove item</a>
>            >
>            >     If I code my template like this, it just do a GET request.
>            >     How can I introduce DELETE method  to tell REST API to
>         delete my
>            >     item id?
>            >
>            >     Sorry if my question seems stupid, I am a bit lost.
>            >     If anybody has any clue, very welcome.
>            >
>            >     Regards
>            >     --
>            >     -------------------------
>            >     Emmanuel Quevillon
>            >     Biological Software and Databases Group
>            >     Institut Pasteur
>            >     +33 1 44 38 95 98
>            >     tuco at_ pasteur dot fr
>            >     -------------------------
>            >
>            >
>            > You didn't include your remove_item method.  Can you post that?
>            >
>            > -J
> 
>            It is very basic, it took code from Jrock's book :)
> 
>            sub item_DELETE {
> 
>               my($self, $c) = @_;
> 
>               my $id = $c->stash()->{id};
> 
>               my $set = $c->model('MyAppDB::Item')->find({id => $id});
> 
>               if($set){
>                   $self->status_ok($c,
>                                    entity => mk_entity($set));
>                   $set->delete();
>               }
>               else{
>                   $self->status_not_found($c,
>                                           message => "Item not found");
>               }
>            }
> 
>            --
> 
> 
>         I meant the javascript method, not the Catalyst method.
> 
>         There should be a "function remove_item()" somewhere, as it
>         doesn't seem part of Jemplate.  Also, you probably want to use
>         jQuery or something more robust for your asynchronous calls.
>          Jemplate docs don't even seem to have a delete method.
> 
>         -J
> 
>     Ooops sorry, but it is already in the first email, mentionned as 'in
>     test.js':
> 
> 
>     function remove_item(id){
>         Jemplate.process('test.tt2',
>                         '[% Catalyst.uri_for("/rest/item/") %]'+id,
>                         '#_item');
>        }
> 
>     Thanks for this help
> 
>     Emmanuel
> 
> 
> Oh, I missed it because it just is a Jemplate.process line... didn't
> even see the remove_item. 
> 
> That's a GET request, since it just fetches something remotely from the
> server and does nothing else. 
> 
> You need to change the method to DELETE, and then handle the response. 
> You'll have to read the pod on Jemplate and jQuery and figure out
> exactly how to change the request method to DELETE, and then process the
> response.  The Jemplate pod has a bit that shows how to use jQuery
> directly to get the response (using getJSON) -- you should just have to
> modify that bit accordingly.
> 
> As part of the jquery docs on the ajax object, it seems just setting
> "type" to "DELETE" should do the trick.  You can read more here:
> 
> http://docs.jquery.com/Ajax/jQuery.ajax#options
> 
> 
> -J

Hi J,

Thanks pointing me to this doc. It seems very useful and adequate
for what I want to do.
Thanks for your help.

Emmanuel

-- 
-------------------------
Emmanuel Quevillon
Biological Software and Databases Group
Institut Pasteur
+33 1 44 38 95 98
tuco at_ pasteur dot fr
-------------------------



More information about the Catalyst mailing list