Hi Anthony, It seems that i got it working ... The sad part is the graph flickers everytime it renders... :(
Just a dumb question... Is it possible.. I have this on my controller py contoller/default.py def index(): ... return dict() def update_value(): ... return json(new_value) and this is on my index.html /views/default/index.html ...html tags/divs that displays graph <script type="text/javascript"> graph function... {{ need to schedule updating of new_value (1 sec interval)}} var new_value = {{<controller(update_value) returning a value>}} </script> what i want to do is ajax(maybe another method not ajax) a certain value to my view with a different controller(update_value) updating/checking changes in database every 1 sec interval Thanks in advance really it does helps a lot... Thanks, Jak On Monday, September 11, 2017 at 10:26:15 PM UTC+8, Anthony wrote: > > Looks like your JS runs only at window.onload, but the graph data are > delivered via Ajax requests. > > Anthony > > On Sunday, September 10, 2017 at 10:48:31 PM UTC-4, Wabbajack wrote: >> >> Hi Anthony, >> >> I have successfully get the values from another file... thanks... >> But for now i have another problem displaying the values into a graph... >> >> >> >> In views/default/index.html >> {{extend 'layout.html'}} >> >> {{=LOAD('default', 'graph', ajax=True, timeout=500, times='infinity')}} >> >> {{=BEAUTIFY(response._vars)}} >> >> In my default.py controller >> from gluon.serializers import json >> >> def index(): >> return dict() >> >> >> def graph(): >> temp_graph = [] >> temp=[] >> timet=[] >> for x in db().select(db.temperature_table.ALL): >> temp.append(x.temp_value) >> timet.append(x.tm_timestamp) >> temp_graph.append({'y':x.temp_value, 'label':x.tm_timestamp}) >> >> return dict(temp_graph=json(temp_graph),VA=temp,VB=timet) >> >> >> In views/default/graph.html >> <script src="{{=URL('static','js/canvasjs.min.js')}}"></script> >> <div id="chartContainer" style="height: 300px; width: 50%;"></div> >> >> {{=VA}} >> {{=VB}} >> >> <br> ------------ Value In Graph ------------ <br> >> {{=temp_graph}} >> >> >> <script type="text/javascript"> >> window.onload = function () { >> var chart = new CanvasJS.Chart("chartContainer", { >> theme: "theme3", >> legend: { >> horizontalAlign: "center", // "left" , "right" >> verticalAlign: "bottom", // "center" , "top" >> fontSize: 12 >> }, >> title:{ >> text: "Temperature reader" >> }, >> animationEnabled: false, >> data: [ >> { >> type: "line", >> showInLegend: true, >> legendText: "temperature", >> dataPoints: {{=XML(temp_graph)}} >> } >> ] >> }); >> chart.render(); >> } >> >> </script> >> >> >> In Browser the <graph.html> renders the graph and value completely with >> no problems >> >> >> But the in <index.html> the graph does not render.. only Values are >> shown.. >> >> >> I have also tried increasing the value of the timeout maybe the graph is >> not rendered due to timeout value but still no avail... >> >> {{extend 'layout.html'}} >> >> {{=LOAD('default', 'graph', ajax=True, timeout=20000, times='infinity')}} >> >> {{=BEAUTIFY(response._vars)}} >> >> >> >> >> >> >> >> >> >> >> >> On Friday, September 8, 2017 at 7:06:32 PM UTC+8, Anthony wrote: >>> >>> What does your newvalue.load view look like? Does it display the temp >>> and timet lists? >>> >>> Note, your index.html view is incorrect -- it has {{=temp}} and >>> {{=timet}}, but the dictionary returned by the index() function instead >>> uses VA and VB as keys, so the view should have {{=VA}} and {{=VB}} (should >>> be the same in your newvalue.load view). Actually, because the returned >>> values are Python lists, you probably want a more sophisticated display >>> than simply {{=VA}}. >>> >>> Also, note that there is no reason to have two identical functions. You >>> can instead have a single function and just use two different views and >>> extensions (i.e., index.html and index.load). >>> >>> Even better, just use an Ajax component to load the data and set it to >>> refresh periodically: >>> >>> def index(): >>> return dict() >>> >>> def get_data(): >>> ... >>> return dict(VA=temp, VB=timet) >>> >>> In views/default/index.html: >>> >>> {{=LOAD('default', 'get_data.load', ajax=True, timeout=1000, times= >>> 'infinity')}} >>> >>> In views/default/get_data.load: >>> >>> {{=VA}} >>> {{=VB}} >>> >>> Keep in mind that this is an inefficient way to get realtime updates. >>> First, you are polling every second, whether or not the data have changed. >>> Second, you are sending all the data on every request instead of just the >>> changes. This may be fine for your use case, but a more efficient approach >>> would be to use a server push pubsub method (e.g., use websockets to >>> publish updates to the client) -- see >>> https://github.com/web2py/web2py/blob/master/gluon/contrib/websocket_messaging.py >>> . >>> >>> Anthony >>> >>> >>> On Friday, September 8, 2017 at 2:52:57 AM UTC-4, Wabbajack wrote: >>>> >>>> Hi All, >>>> >>>> >>>> >>>> I am really confused on auto updating variable on view... >>>> What i want is i have an initial value that is displayed on >>>> index.html<view> thru query in default.py index function >>>> But hope to change this values everytime there is a change on the >>>> database. >>>> >>>> I have read this >>>> https://groups.google.com/forum/#!topic/web2py/XN9Wqb3jqKk >>>> but still having confusion the variable arent updating or creating new >>>> string file >>>> >>>> >>>> *controllers/default.py >>>> >>>> >>>> *view/default/index.html >>>> >>>> >>>> >>>> * Also i have created a file newvalue.load on views/default/ directory >>>> >>>> >>>> *models.py >>>> >>>> >>>> <additional info> >>>> I am using web2py 2.14 on windows PC >>>> >>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.