Dear All,

Thank you for giving your ideas/thoughts and explaining the things.

Thanks Mahmoud, this example helped me completing the task.

I've used Jemplate, jQuery, JSON to complete my task. I'm writing few more
details.. ( adding my stuff in Mahmoud's code) - this might be helpful for
somebody else..

======================================================
======================================================

lets say that you have the following controller /test/ajax

sub ajax : Local {

    my ($self,$c) = @_;

    my $params = $c->req->parameters;
    my $id = $params->{id};
  #do what ever you want with id

  ##response type

    $c->response->content_type("application/json");

    ##send request in json format, this is just an example :)

   $c->res->body(qq~{
     "books": {
        "book1": "firstbook",
        "book2": "secondbook"
    }
   }~);


   ## another way to put data in JSON format is using "JSON" module
   ## use JSON;

   my %data =("id"=>123,"name"=>'rohan')
   my $json_text = to_json(\%data);
   $c->res->body($json_text);

}

================== In template [html]  files =================
your jquery

 $(document).ready(function() {
         var test = 1;

         $.ajax({
            url: '/test/ajax',
            data: 'id='+test,
            dataType: 'json',
            type: 'get',
            success: function (j) {
                var elem = document.getElementById('elementDiv');
Jemplate.process('display.tt2',j,elem);
            },
            error: function(xhr, ajaxOptions, thrownError){
                alert(xhr.statusText);
            }
            });
});

=====================================
Install Jemplate module and configure Jemplate in Root.pm of the
application.

The directory which point to MyApp->path_to( 'root', 'jemplate'), is the
directory to put the Jemplate files.
Basically Jemplate files are (like) Template Toolkit files. Put display.tt2
in the Jemplate directory.
Display the variables in desired format.
 e.g display.tt2

<table>
<tr class="Header" >
<td>id</td><td>name</td>
</tr>
<tr >
<td>[% id | html %]</td><td>[% name | html %]</td>
</tr>
</table>

The Jemplate html will get rendered in the element "elementDiv"
=============================================================

Thanks Mehmoud for the code...

Regards,

Rohan
Bioinformatician

On Thu, Jan 6, 2011 at 7:37 PM, Mahmoud Mehyar <[email protected]>wrote:

> sorry first one sent by mistake
>
> use success method instead of complete as complete will return if the
> response is ok or false and try to catch errors
> with error method
>
> put your jqury inside document ready function "recommended"
>
> lets say that you have the following controller /test/ajax
>
> sub ajax : Local {
>
>
>     my ($self,$c) = @_;
>
>     my $params = $c->req->parameters;
>     my $id = $params->{id};
>   #do what ever you want with id
>
>   ##response type
>
>     $c->response->content_type("application/json");
>
>     ##send request in json format, this is just an example :)
>
> $c->res->body(qq~{
>   "books": {
>     "book1": "firstbook",
>     "book2": "secondbook"
>   }
> }~);
>
> }
>
>
> your jquery
>
>
>  $(document).ready(function() {
>
>         var test = 1;
>
>          $.ajax({
>             url: '/test/ajax',
>             data: 'id='+test,
>             dataType: 'json',
>             type: 'get',
>             success: function (j) {
>                 alert(j.books.book1);
>             },
>             error: function(xhr, ajaxOptions, thrownError){
>                 alert(xhr.statusText);
>             }
>             });
> });
>
> hope this help, always catch errors either with jquery or catalys  to find
> where the problem is to fix
>
>
> On Thu, Jan 6, 2011 at 5:02 PM, Mahmoud Mehyar <[email protected]>wrote:
>
>> ok I'm not familiar with jemplate but I'll post a simple example with
>> jquery and catalyst that might help you
>>
>> first for the jquery
>>
>> use success method instead of complete as complete will return if the
>> response is ok or false and try to catch errors
>> with error method
>>
>> put your jqury inside document ready function "recommended"
>>
>> lets say that you have the following controller /test/ajax
>>
>> sub index : Private {
>>
>>     my ($self,$c) = @_;
>>
>>     my $params = $c->req->parameters;
>>     my $id = $params->{id};
>>
>>
>>
>>     $c->response->content_type("application/json");
>>
>>
>> $c->res->body(qq~{
>>   "books": {
>>     "book1": "firstbook",
>>     "book2": "secondbook"
>>   }
>> }~);
>> #}
>>
>> }
>>
>>  $(document).ready(function() {
>>
>>         var test = 1;
>>          $.ajax({
>>             url: '/test/ajax',
>>             data: 'id='+test,
>>             dataType: 'json',
>>             type: 'get',
>>             success: function (j) {
>>                 alert(j.books.book1);
>>             },
>>             error: function(xhr, ajaxOptions, thrownError){
>>                 alert(xhr.statusText);
>>             }
>>             });
>> });
>>
>>
>>
>>
>>
>> On Thu, Jan 6, 2011 at 4:05 PM, Rohan M <[email protected]> wrote:
>>
>>> Dear All,
>>>
>>> After hearing from you all ,  I'm tried Jquery and Jemplate but I'm not
>>> able to create JSON object of my data.
>>>
>>> The thing I want to do is --
>>>
>>> 1) Onblur event of input box - take id and search database
>>> 2) Render data returned from Ajax call in table format.
>>>
>>> For this, I've used following code
>>>
>>>           $.ajax({
>>>  url: '/controller/action/',
>>> data: 'id='+var,
>>> dataType: 'json',
>>>  type: 'get',
>>> complete: function (j) {
>>> var elem = document.getElementById("elementToRender");
>>>  Jemplate.process('show.tt2',j, elem);
>>> }
>>> });
>>>
>>> **My action is not returning anything instead, I've action.tt2 which is
>>> getting returned with required database output.**
>>>
>>>
>>> I searched on net and found "'Catalyst::View::JSON" but even after adding
>>> JSON.pm I'm unable to convert data into JSON object.
>>>
>>> Please correct me, as I must be doing something wrong.
>>>
>>> Thanks and regards,
>>> Rohan
>>>
>>> On Thu, Jan 6, 2011 at 10:37 AM, Rohan M <[email protected]> wrote:
>>>
>>>> Thanks all for looking into this..
>>>>
>>>> I've created a template (i.e action.tt) file and the variables in stash
>>>> are rendered in this page. The HTML's element is getting rendered with the
>>>> output from Ajax call.
>>>>
>>>> The problem now is, I see my main page and the action page (rendered
>>>> from ajax) together. Just because the "action.tt" takes the default
>>>> style I see entire page duplication(with menus, status, links) in the
>>>> rendered element of main page.
>>>>
>>>> Can we make a template without taking default style available for site?
>>>>
>>>> Also, I'm pretty much open to any of the Javascript framework, I know
>>>> little about JQuery also. But I want to see a small demo which is 
>>>> integrated
>>>> with Catalyst.
>>>>
>>>> Do somebody have such demo or link for the same?
>>>>
>>>> Thanks,
>>>> ROhan
>>>> On Wed, Jan 5, 2011 at 11:14 PM, Mesdaq, Ali <[email protected]>wrote:
>>>>
>>>>> I recommend testing this using Firefox with Firebug enabled so you can
>>>>> watch the AJAX request and you can also print to the console to see what
>>>>> your response looks like to make sure it’s what you’re expecting
>>>>>
>>>>>
>>>>>
>>>>> console.log(xmlhttp.responseText);
>>>>>
>>>>> document.getElementById("data").innerHTML=xmlhttp.responseText;
>>>>>
>>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> ------------------------------------------
>>>>>
>>>>> Ali Mesdaq (CISSP, GIAC-GREM)
>>>>>
>>>>> Sr. Security Researcher
>>>>>
>>>>> Websense Security Labs
>>>>>
>>>>> http://www.WebsenseSecurityLabs.com<http://www.websensesecuritylabs.com/>
>>>>>
>>>>> ------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>> *From:* Rohan M [mailto:[email protected]]
>>>>> *Sent:* Wednesday, January 05, 2011 3:07 AM
>>>>> *To:* [email protected]
>>>>> *Subject:* [Catalyst] Ajax Problem.
>>>>>
>>>>>
>>>>>
>>>>> Dear All,
>>>>>
>>>>>
>>>>>
>>>>> I want to use Ajax in my Catalyst application.
>>>>>
>>>>>
>>>>>
>>>>> Thing's that I've done till now :
>>>>>
>>>>>
>>>>>
>>>>> 1) Created a Javascript function on an event (onblur event) in my view
>>>>> (tt page).
>>>>>
>>>>> 2) Created xmlhttp object in that Javascript function.
>>>>>
>>>>> 3) Called the '/controller/action' path with parameters.
>>>>>
>>>>> 4) The Action subroutine searches database and puts results in the *
>>>>> stash*
>>>>>
>>>>>
>>>>>
>>>>> I could see, the things are working till the fourth step correctly.
>>>>>
>>>>>
>>>>>
>>>>> Now, how can I render the stash variables in the current tt page?
>>>>>
>>>>>
>>>>>
>>>>> Or Will I need to parse the entire content?
>>>>>
>>>>>
>>>>>
>>>>> Is there a better solution for this problem?
>>>>>
>>>>>
>>>>>
>>>>> Any help or similar (simple) example will be appreciable.
>>>>>
>>>>>
>>>>>
>>>>> CODE SNIPPET
>>>>>
>>>>> =======================================================================
>>>>>
>>>>>
>>>>>
>>>>> function getDetails(id)
>>>>>
>>>>>             {
>>>>>
>>>>>                         var param = "id="+id;
>>>>>
>>>>>                         if (window.XMLHttpRequest)
>>>>>
>>>>>                         {
>>>>>
>>>>>                                     xmlhttp=new XMLHttpRequest();
>>>>>
>>>>>                         }
>>>>>
>>>>>                         else
>>>>>
>>>>>                         {
>>>>>
>>>>>                                     xmlhttp=new
>>>>> ActiveXObject("Microsoft.XMLHTTP");
>>>>>
>>>>>                         }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> xmlhttp.open("GET","/indexer/getid/"+"?"+param,true);
>>>>>
>>>>>                 // /controller/action url
>>>>>
>>>>>                         xmlhttp.send();
>>>>>
>>>>>                         xmlhttp.onreadystatechange=function()
>>>>>
>>>>>                         {
>>>>>
>>>>>                                     if (xmlhttp.readyState==4 &&
>>>>> xmlhttp.status==200)
>>>>>
>>>>>                                     {
>>>>>
>>>>>
>>>>> document.getElementById("data").innerHTML=xmlhttp.responseText;
>>>>>
>>>>>                                 // the element to render output
>>>>>
>>>>>                                     }
>>>>>
>>>>>                         }
>>>>>
>>>>>                         show();
>>>>>
>>>>>
>>>>>
>>>>>             }
>>>>>
>>>>>
>>>>>
>>>>> =======================================================================
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Thanks and regards,
>>>>>
>>>>> Rohan
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Click here <https://www.mailcontrol.com/sr/wQw0zmjPoHdJTZGyOCrrhg==>to 
>>>>> report this email as spam.
>>>>>
>>>>>
>>>>> Protected by Websense Hosted Email Security — www.websense.com
>>>>>
>>>>> _______________________________________________
>>>>> List: [email protected]
>>>>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>>>>> Searchable archive:
>>>>> http://www.mail-archive.com/[email protected]/
>>>>> Dev site: http://dev.catalyst.perl.org/
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> List: [email protected]
>>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>>> Searchable archive:
>>> http://www.mail-archive.com/[email protected]/
>>> Dev site: http://dev.catalyst.perl.org/
>>>
>>>
>>
>
> _______________________________________________
> List: [email protected]
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive:
> http://www.mail-archive.com/[email protected]/
> Dev site: http://dev.catalyst.perl.org/
>
>
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to