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.

Reply via email to