web2py AlterEgo
rock solid framework for agile and secure web applications
home
search
Edit page
Title:
Security Code:
Body:
(use
this
wiki markup)
###This entry builds on example #43 from the web2py examples page, to demonstrate a few more ways to enhance a web2py app with simple AJAX calls. Although the code is very short it does show : * how to change the value of an entry field (INPUT) instead of a block's content (InnerHTML) * how to use the same python callback function for several fields of the same type * how to use links or even clickable text as Ajax "triggers" in addition to form buttons * incrementing and decrementing numbers and dates in text fields * the usefulness of having a third column in SQLFORM :-) Enjoy, fpp ----------------------------------- ## In controllers/default.py : from datetime import date, timedelta from time import mktime, strptime date_format = "%Y-%m-%d" # in real life this would be read from database or a session variable def index(): return dict() def incnum(): numstr = request.vars.values()[0] return int(numstr) + 1 def decnum(): numstr = request.vars.values()[0] return int(numstr) - 1 def incdate(): datestr = request.vars.values()[0] ts = mktime(strptime(datestr , date_format)) newdate = date.fromtimestamp(ts) + timedelta(days=1) return newdate.strftime(date_format) def decdate(): datestr = request.vars.values()[0] ts = mktime(strptime(datestr , date_format)) newdate = date.fromtimestamp(ts) - timedelta(days=1) return newdate.strftime(date_format) ----------------------------------- ## In views/default/index.html : (the "myajax" function below is the same as in web2py_ajax.html, except that "innerHTML" was replaced by "value" in the last line) {{extend 'layout.html'}} <script type="text/javascript"><!-- function myajax(u,s,t) { var query=""; for(i=0; i<s.length; i++) { if(i>0) query=query+"&"; query=query+encodeURIComponent(s[i])+"="+encodeURIComponent(document.getElementById(s[i]).value); } $.ajax({type: "POST", url: u, data: query, success: function(msg) { document.getElementById(t).value=msg; } }); } //--></script> <center> <table> <tr> <td>Sales: </td><td><input type="text" id="amount" value="999"></td> <td> <input type="submit" id="adec" value="<<" onclick="myajax('{{=URL(r=request,f='decnum')}}',['amount'],'amount');"> <input type="submit" id="ainc" value=">>" onclick="myajax('{{=URL(r=request,f='incnum')}}',['amount'],'amount');"> </td> </tr> <tr> <td>Tax: </td><td><input type="text" id="tax" value="8"></td> <td> <a href="#" id="tdec" onclick="myajax('{{=URL(r=request,f='decnum')}}',['tax'],'tax');"><<</a> <a href="#" id="tinc" onclick="myajax('{{=URL(r=request,f='incnum')}}',['tax'],'tax');">>></a> </td> </tr> <tr> <td>Date: </td><td><input type="text" id="date" value="2008-02-28"></td> <td> <span id="ddec" style="cursor: pointer;" onclick="myajax('{{=URL(r=request,f='decdate')}}',['date'],'date');"><<</span> <span id="dinc" style="cursor: pointer;" onclick="myajax('{{=URL(r=request,f='incdate')}}',['date'],'date');">>></span> </td> </tr> </table> (in real life the TABLE would be a SQLFORM using the "3col" argument for the controls) -----------------------------------
Resources
Home
Version 1.55 (2009-01-07 21:56:58)
Examples
|
API
|
ORM
Compare
|
Django
|
TG
|
Rails
|
PHP
|
Java
Tutorial
|
Book
|
epydocs
Screencast short
|
long
|
shell
|
GAE
Online Demo
Interactive FAQ (AlterEgo)
Repository of free web2py apps
KPAX (the web2py CMS)
Model Builder
|
Layout Builder
Central Authentication Service
Users Group (free to join)
Development Trunk (svn)
Contact
Massimo Di Pierro
School of Computing
DePaul University
243 S. Wabash Ave
Chicago, IL 60604 (USA)
mdipierro@cs.depaul.edu