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.