definitively you want 

def get_locations():
    return response.json(locations)

and 

$.getJSON instead of $.get. 

which those changes what errors do you get?

On Monday, 5 September 2016 15:51:44 UTC-5, Gael Princivalle wrote:
>
> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to