Hi Massimo, never mind. I do not want the variable passed with jQuery.getJSON, but with the url: '% (callback) s', which is called with LoadComplete: .trigger ("reload grid"). Here's the code so far..
_____________________________________________________ app/models/plugin_jqgrid.py: def plugin_live_grid(table,fieldname=None,fieldvalue=None,col_widths={}, _id=None,columns=None,col_width=80,width=700,height=300): """ just do to embed the jqGrid with ajax search capability and pagination {{=plugin_jqgrid(db.tablename)}} - table is the db.tablename - fieldname, fieldvalue are an optional filter (fieldname==fieldvalue) - _id is the "id" of the DIV that contains the jqGrid - columns is a list of columns names to be displayed - cold_width is the width of each column - height is the height of the jqGrid """ from gluon.serializers import json _id = 'jqgrid_%s' % table columns = columns or [x for x in table.fields if table[x].readable] colnames = [x.replace('_',' ').capitalize() for x in columns] colmodel = [{'name':x,'index':x, 'width':col_widths.get(x,col_width), 'sortable':True} \ for x in columns if table[x].readable] callback = URL(r=request,c='plugin_jqgrid',f='data', vars=dict(tablename=table._tablename, columns=','.join(columns), fieldname=fieldname or '', fieldvalue=fieldvalue, )) script=""" var server_time=null; jQuery(document).ready(function(server_time){jQuery("#% (id)s").jqGrid({ url:'%(callback)s', datatype: "json", colNames: %(colnames)s, colModel:%(colmodel)s, rowNum:10, rowList:[20,50,100], pager: '#%(id)s_pager', onSelectRow: function(postdata) {web2py_ajax_page('get','/jqgrid2/ default/tabs2/'+(postdata),null,'panel');}, loadComplete: function () { var server_time=jQuery("#%(id)s").getGridParam('userData'); setTimeout(function(){ alert(server_time); jQuery("#%(id)s").jqGrid().setGridParam({datatype:"json"}); jQuery("#%(id)s").jqGrid().trigger("reloadGrid", [{current:true}]); }, 1000); /* 1000..after 1 seconds */ }, loadError: function () { setTimeout(function(){ jQuery("#%(id)s").jqGrid().setGridParam({datatype:"json"}); jQuery("#%(id)s").jqGrid().trigger("reloadGrid", [{current:true}]); }, 15000); /* milliseconds (15seconds) */ }, caption:'%(tablename)s', viewrecords: true, height:%(height)s, loadui:"disabled"}); jQuery("#%(id)s").jqGrid('navGrid','#%(id)s_pager', {search:true,add:false,edit:false,del:false}); jQuery("#%(id)s").setGridWidth(%(width)s,false);}); """ % dict(callback=callback,colnames=json(colnames), tablename=table._tablename.capitalize(), colmodel=json(colmodel),id=_id,height=height,width=width) return TAG[''](TABLE(_id=_id), DIV(_id=_id+"_pager"), SCRIPT(script)) _______________________________________________________ app/controllers/plugin_jqgrid.py: from random import randint from time import sleep def error(): raise HTTP(400) def data2():# for testing if randint(1,3) == 1: raise HTTP(400) else: return data2() def data(): sleep(10) # for testing "http://trirand.com/blog/jqgrid/server.php? q=1&_search=false&nd=1267835445772&rows=10&page=1&sidx=amount&sord=asc&searchField=&searchString=&searchOper=" from gluon.serializers import json import cgi tablename = request.vars.tablename or error() columns = (request.vars.columns or error()).split(',') rows=int(request.vars.rows or 25) page=int(request.vars.page or 0) sidx=request.vars.sidx or 'id' sord=request.vars.sord or 'asc' searchField=request.vars.searchField searchString=request.vars.searchString searchOper={'eq':lambda a,b: a==b, 'nq':lambda a,b: a!=b, 'gt':lambda a,b: a>b, 'ge':lambda a,b: a>=b, 'lt':lambda a,b: a<b, 'le':lambda a,b: a<=b, 'bw':lambda a,b: a.like(b+'%'), 'bn':lambda a,b: ~a.like(b+'%'), 'ew':lambda a,b: a.like('%'+b), 'en':lambda a,b: ~a.like('%'+b), 'cn':lambda a,b: a.like('%'+b+'%'), 'nc':lambda a,b: ~a.like('%'+b+'%'), 'in':lambda a,b: a.belongs(b.split()), 'ni':lambda a,b: ~a.belongs(b.split())}\ [request.vars.searchOper or 'eq'] table=db[tablename] if request.vars.fieldname: dbset = table._db(table[request.vars.fieldname]==request.vars.fieldvalue) else: dbset = table._db(table.id>0) if searchField: dbset=dbset(searchOper(table[searchField],searchString)) orderby = table[sidx] if sord=='desc': orderby=~orderby limitby=(rows*(page-1),rows*page) fields = [table[f] for f in columns] records = dbset.select(orderby=orderby,limitby=limitby,*fields) nrecords = dbset.count() items = {} items['userdata']=request.now items['page']=page items['total']=int((nrecords+(rows-1))/rows) items['records']=nrecords readable_fields=[f.name for f in fields if f.readable] def f(value,fieldname): r = table[fieldname].represent if r: value=r(value) try: return value.xml() except: return cgi.escape(str(value)) items['rows']=[{'id':r.id,'cell':[f(r[x],x) for x in readable_fields]} \ for r in records] return json(items) ________________________________________ app/controllers/default.py: # -*- coding: utf-8 -*- ######################################################################### ## This is a samples controller ## - index is the default action of any application ## - user is required for authentication and authorization ## - download is for downloading files uploaded in the db (does streaming) ## - call exposes all registered services (none by default) ######################################################################### def index(): """ example action using the internationalization operator T and flash rendered by views/default/index.html or views/generic.html """ response.flash = T('Welcome to web2py') return dict(message=T('Hello World')) def user(): """ exposes: http://..../[app]/default/user/login http://..../[app]/default/user/logout http://..../[app]/default/user/register http://..../[app]/default/user/profile http://..../[app]/default/user/retrieve_password http://..../[app]/default/user/change_password use @auth.requires_login() @auth.requires_membership('group name') @auth.requires_permission('read','table name',record_id) to decorate functions that need access control """ return dict(form=auth()) def download(): """ allows downloading of uploaded files http://..../[app]/default/download/[filename] """ return response.download(request,db) def call(): """ exposes services. for example: http://..../[app]/default/call/jsonrpc decorate with @services.jsonrpc the functions to expose supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv """ session.forget() return service() def jqgrid(): """ exposes services. for example: http://..../[app]/default/call/jsonrpc decorate with @services.jsonrpc the functions to expose supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv """ return dict(grid=plugin_live_grid(db.device)) _________________________________ THX Dieter Asman On 10 Nov., 15:37, mdipierro <mdipie...@cs.depaul.edu> wrote: > Sorry I did not help. I cannot help you because the code you have > above is incomplete. It opens a """ but never closes so I not > understand how callback is used. Anyway I assume in the view you have: > > {{callback = URL(r=request,c='plugin_jqgrid',f='data', > vars=dict(tablename=table._tablename, > columns=','.join(columns), > fieldname=fieldname or '', > fieldvalue=fieldvalue, > ))}} > > var server_time="test" > > ... jQuery.getJSON('{{=callback}} > &'server_time='+escape(server_time)) ... > > hope this helps. > > On Nov 10, 8:24 am, AsmanCom <d.as...@web.de> wrote: > > > Is there no solution to my concerns? > > > It´s such a pity... > >