My requirement is to fetch the JSON data from rails server and use it to update the place marks on a google map. I start with a view form that submits the user query. I am submitting this query form using the form_remote_tag
<%= form_remote_tag (:update =>; 'searchMapResults',:loading =>; "Element.show('spinner')",:complete =>; " Element.hide('spinner') ; ",
:id =>; 'searchMapForm' ,
:url =>; {:action =>; :searchMap}) %>;
Next, we go to the controller action that handles this request. searchMap action should fire a SQL query, load some data in instance variables and return part of data as JSON string to the UI. The controller action looks like
def searchMap
# get the area and search token
filter = params[:filter]
binds = Hash.new
sql = { some sql ..... }
@pmarks = Pmark.find_by_sql [sql, binds] payload = Hash.new
points = Array.new
@pmarks.each do |pmark|
point = Hash.new
point[:latitude] = pmark.latitude
point[:longitude] = pmark.longitude
point[:name] = pmark.name
point[:description] = pmark.description
points.push(point)
end
payload[:markers] = points
@jsonData = payload.to_json
logger.debug( " gloo : markers json data" + @jsonData);
render(:layout => false )
end
We fire a SQL query and load the results. Next we create a Hash (payload) of arrays (markers) of hash (point). we convert this payload RUBY data structure to JSON string using the Active support JSON gem. I installed this gem using command$gem install json
This gem provides a ready made to_json method. Next step is to use this JSON data string inside our view and javascript files. Our searchMap.html (view for this action looks like:)
<script>
loadPoints('<%= @jsonData %>');
</script>
And finally inside a loadPoints javascript function we evaluate the JSON data and use it.
function loadPoints(content){
var jsonData = eval('(' + content + ')');
for (var i=0; i<>
alert(jsonData.markers[i].name);
}
}