Cookbook /
ServePageByJSON
Summary: Serve a page by JSON (presumably for AJAX)
Version: 2013-05-02
Prerequisites:
Status: Working
Maintainer: Peter Bowers
Categories: Ajax
Discussion: ServePageByJSON-Talk?
Questions answered by this recipe
- I wish to access page text from a separate script via AJAX. How can I get the HTML to be sent via JSON?
Description
Serve pages by JSON for use in AJAX.
Installation
In config.php
$HandleActions['json'] = 'HandleServeJSON'; $HandleAuth['json'] = 'read'; function HandleServeJSON($pagename, $auth = 'read') { global $HandleBrowseFmt; $HandleBrowseFmt = array('function:PrintJSON'); HandleBrowse($pagename, $auth); } function PrintJSON($pagename) { global $FmtV; header("Content-type: application/json"); print json_encode(array( 'title'=>PageVar($pagename,'$Titlespaced'), 'body'=>$FmtV['$PageText'], )); }
Usage
Obviously your AJAX call may vary greatly depending on your application, but here is one example putting the contents of the page in a jquery-ui dialog with ID=helpscreen:
<script type="text/javascript" src="jquery-1.9.1.min.js"></script> <script type="text/javascript" src="jquery-ui-1.10.2/ui/minified/jquery-ui.min.js"></script> <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/smoothness/jquery-ui.min.css" /> ... <div id="helpscreen" style="display:none"></div> ... <script type="text/javascript"> ... url = 'pmwiki/pmwiki.php?n=Mygroup.Mypage&action=json'; $("#helpscreen").html("<i>Loading content...</i>").dialog({ title: title }).dialog("open"); $.ajax({ url: url, }).done(function( json ) { if (json['title']) $("#helpscreen").dialog({ title: json['title'] }); if (json['body']) $('#helpscreen').html(json['body']); else $('#helpscreen').html('<i>No help content for this page.</i>'); $("#helpscreen").dialog({width: "auto", height: "auto", position: {my:"center", at:"center", of:window} }); }); </script>
Notes
Appreciation to Petko for his help in getting this working.
Change log / Release notes
- 2013-05-02 Initial Release
See also
- Email Thread from 2009 giving another possible approach
Contributors
Comments
See discussion at ServePageByJSON-Talk?
User notes? : If you use, used or reviewed this recipe, you can add your name. These statistics appear in the Cookbook listings and will help newcomers browsing through the wiki.