Try going to http://127.0.0.1:8000/inventoryapp/default/index/ (note the trailing "/"), and you should see the same problem. On the storeadmin page, the problem should go away if you exclude the trailing "/" from the URL.
The problem is, in the call to ajax(), the URL is just 'echo'. Because it doesn't start with a "/", the browser interprets that as being relative to the current URL path, which it assumes ends after the last "/". If the current URL ends in a "/", the browser just adds "echo" to that and makes the Ajax call to the current URL (web2py will just see "echo" as a URL argument rather than a function). If you check the network traffic on the storeadmin example, you should see the Ajax call going to http://127.0.0.1:8000/inventoryapp/default/storeadmin/echo. The best approach is to use the full URL in the Ajax call, using the URL() function: _onkeyup="ajax(%s, ['keyword'], 'target');" % URL('default', 'echo') We should probably change that in the book. Anthony On Wednesday, May 2, 2012 3:09:48 AM UTC-4, Dolgion Chuluunbaatar wrote: > > Hello, > I am trying to make the echo example work which is in the online book. > It works fine in my index function, but it doesn't work in any other > function. > I use the same callback method in both views: > > def echo(): > return request.vars.keyword > > > and the methods (one is index, the other is called storeadmin) have > identical code and views as well: > > def index(): #as well as def: storeadmin(): > > > return dict( > form = FORM ( > INPUT( > _name='keyword', > _onkeyup="ajax('echo', ['keyword'], 'target');" > ) > ), > target_div=DIV(_id='target')) > > > the view is: > > > {{extend 'layout.html'}} > > > {{=form}} > > > <br /> > > > {{=target_div}} > > In index, the ajax call works as it should, but in storeadmin, I get the > entire page pasted into the target div. > I put 2 screenshots of the pages for both methods to make it more clear. > > do you have any idea why this could be? > >

