Thanks Dave.

However I'm still having trouble.

With that script in the view google maps API load my all locations:
I build a Javascript object.
            var locations = [
                {{for event in events:}}
                    {title: '{{=event.title}}',
                      link: '{{=URL('default', 'mtb_tour', 
vars=dict(event_id=event.id))}}',
                      location: {lat: {{=event.latitude}}, lng: {{=event.
longitude}} }},
                {{pass}}
            ];

What I would like to do it to update theses locations when the user change 
the map view.
So when the map is in idle I would like to get all locations from the new 
bounds. I've not set yet the new bounds test with getBounds()as I'm still 
in trouble for getting data. 
            map.addListener("idle", function(){
                hideListings();
                $.get("{{=URL('default', 'get_locations')}}", function(
locations,status) {
                    //alert("Data: " + locations + "\nStatus: " + status);
                    for (var i = 0; i < locations.length; i++) {
                        // Get the position from the location array.
                        var position = locations[i].location;
                        var title = locations[i].title;
                        var link = locations[i].link;
                        // Create a marker per location, and put into 
markers array.
                        var marker = new google.maps.Marker({
                            position: position,
                            title: title,
                            link: link,
                            animation: google.maps.Animation.DROP,
                            icon: defaultIcon,
                            id: i
                        });
                        // Push the marker to our array of markers.
                        markers.push(marker);
                        // Create an onclick event to open the large 
infowindow at each marker.
                        marker.addListener('click', function() {
                            populateInfoWindow(this, largeInfowindow);
                        });
                        // Two event listeners - one for mouseover, one for 
mouseout,
                        // to change the colors back and forth.
                        marker.addListener('mouseover', function() {
                            this.setIcon(highlightedIcon);
                        });
                        marker.addListener('mouseout', function() {
                            this.setIcon(defaultIcon);
                        });
                    }
                    showListings();
                });
            });


Here is in my controller the get_locations function:
def get_locations():
    events = db(db.events.id>0).select()
    locations= '['
    for event in events:
        locations += "{title: '" + event.title + "',"
        locations += "link: '" + URL('default', 'mtb_tour', vars=dict(
event_id=event.id)) + "',"
        locations += "location: {lat: " + event.latitude + ", lng: " + event
.longitude + "}},"
    locations+= ']'
    return locations

Like that it return a string, and not a Javascript object.
So the Javascript error is 'Cannot read property 'lat' of undefined'

I've tried to communicate also with Json. If I've understand it's a data 
format like in Javascript.
If I substitute in the javascript:
$.get
by
$.getJson

and in the controller:
return locations
by
return response.json(locations)

Javascript error still the same.

Can someone give me a hand?

Thanks.

Il giorno sabato 6 agosto 2016 01:14:43 UTC+2, Dave S ha scritto:
>
>
>
> On Friday, August 5, 2016 at 2:26:51 PM UTC-7, Gael Princivalle wrote:
>>
>> Hello.
>>
>> I would like to update a javascript array by ajax, keeping the data into 
>> the db.
>> We talk about markers data for Google maps.
>>
>> Here is how I load the data when the page is loaded.
>>         var locations = [
>>             {{for event in events:}}
>>                 {title: '{{=event.title}}',
>>                   link: '{{=URL('default', 'show_event', vars=dict(id=
>> event.id))}}',
>>                   location: {lat: {{=event.latitude}}, lng: {{=event.
>> longitude}} }},
>>             {{pass}}
>>         ];
>>
>> If the user change in a form some criteria like event date or event type, 
>> I would like to update the markers dynamically, without a page reload.
>>
>> Can I do it by ajax?
>>
>> Thanks.
>>
>>
> Are you trying to  update the client, or update the server?  In either 
> case, the answer seems to be yes.  In addition to the LOAD helper, there's 
> some conversations around here about jquery.  I thought I had seen a more 
> direct answer recently, but I can't put my finger on it.  But have a look 
> at 
>
> <URLhttps://groups.google.com/d/msg/web2py/m0wrV8fK4dE/7Uhw7Vs8AwAJ>
>
> Massimo's discussion of Collection+JSON might be helpful, too.
> <URL:https://groups.google.com/d/msg/web2py/WN9yzLIfi6M/mFEAOySVSH4J>
>
> /dps
>
>
>
>
>  
>

-- 
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