use CGI;
  my $cgi = new CGI;


CGI::JSONRPC is a pole for perl.

CGI::JSONRPC implements the JSONRPC protocol as defined at When a JSONRPC request is received by this handler, it is translated into a method call. The method and it's arguments are determined by the JSON payload coming from the browser, and the package to call this method on is determined by the JSONRPC_Class apache config directive.

A sample "dispatcher" module is supplied, CGI::JSONRPC::Dispatcher

Note: This documentation is INCOMPLETE and this is an alpha release. The interface is somewhat stable and well-tested, but other changes may come as I work in implementing this on my website.


When contacted with a GET request, CGI::JSONRPC will reply with the contents of JSONRPC.js, which contains code that can be used to create JavaScript classes that can communicate with their Perl counterparts. See the /examples/hello.html file for some sample JavaScript that uses this library, and /examples/httpd.conf for the corresponding Perl.

When contacted with a POST request, CGI::JSONRPC will attempt to process and dispatch a JSONRPC request. If a valid JSONRPC request was sent in the POST data, the dispatcher class will be called, with the following arguments:


Just like any other class method, the first argument passed in will be name of the class being invoked.


The object ID string from the JSONRPC request. In accordance with the json-rpc spec, your response will only be sent to the client if this value is defined.


All further arguments to the method will be the arugments passed to the JSONRPC constructor. It is expected to be a hash of key value option pairs.

If the client specified an id, your method's return value will be serialized into a JSON array and sent to the client as the "result" section of the JSONRPC response.

The default dispatcher

The default dispatcher adds another layer of functionality; it expects the first argument in @params to be the name of the class the method is being invoked on. See CGI::JSONRPC::Dispatcher for more details on that.


Tyler "Crackerjack" MacDonald <> and David Labatte <>.

A lot of the JavaScript code was borrowed from Ingy döt Net's Jemplate package.


Copyright 2008 Tyler "Crackerjack" MacDonald <> and David Labatte <>

This is free software; You may distribute it under the same terms as perl itself.


The "examples" directory (examples/httpd.conf and examples/hello.html), JSON::Syck,

1 POD Error

The following errors were encountered while parsing the POD:

Around line 136:

Non-ASCII character seen before =encoding in 'döt'. Assuming UTF-8