我正在使用Rails 4.在我的一个控制器中,我使用HTTParty进行调用以从last_fm API获取数据 - 用户指定一个城市,然后我构建了一个html页面,以便即将举行的音乐会的详细信息在该城市中显示(标题,日期,艺术家等)。
我的应用的下一个目标是使用Google Maps API映射这些音乐会。我已设法在页面上加载地图,并将“city”参数(由用户的搜索指定)作为地图自动居中的位置。
由于我通过Ruby HTTP方法获取了Last_fm数据,因此我不得不通过使用jQuery选择器从html页面中获取数据来将其传递给Javascript map API代码。本质上,为了从Ruby传递任何数据(包括用户通过表单和last_fm API请求/响应提交的参数),我需要将该代码放在html('view')中,然后使用jQuery来获取数据到javascript。我使用这种方法很好,但是当我尝试编写一个函数来将更复杂的代码从Ruby传递给Javascript时,我遇到了障碍。
这是我被困的地方:
我的javascript文件中有一行=:console.log($("div.music_id"));
我也试过console.log($("div.music_id").contents());
两者都只是打印到控制台[object Object]
。
我不确定为什么会这样。我在页面上有很多div.music_id元素,我需要遍历它们以便从子DOM节点捕获信息。我无法迭代它们,因为jQuery似乎没有像我希望的那样捕获元素。我希望它会生成一个对象数组,然后我可以执行进一步的jQuery选择器方法来优化我的选择,但我无法做到这一点。谢谢你的帮助。顺便说一下,我的“视图”中的代码就在这里(注意它嵌入了ruby):
<h1>Show data for city specified on previous page</h1>
<% @events.each do |x| %>
<div class="music_id" id=<%= x["id"] %>>
<div class="venue">
<h3>Event Venue:</h3>
<p><%= x["venue"]["name"] %></p>
</div>
<div class="time">
<h3>Date & Time:</h3>
<p> <%= x["startDate"] %></p>
</div>
<div class="event_title">
<h3>Title:</h3>
<p> <%= x["title"] %></p>
</div>
<div class="artists_playing">
<h3>Artists playing:</h3>
<% array = Array(x["artists"]["artist"]) %>
<% array.each do |y| %>
<%= array.index(y) + 1 %>)
<%= y %>
<br>
<% end %>
</div>
<hr>
</div>
<% end %>
和@events引用控制器中的代码(Ruby代码):
@event_list = self.class.get('http://ws.audioscrobbler.com/2.0/',:query =&gt; {
:method => 'geo.getEvents',
:location => params[:city],
:format => 'json',
:api_key => 'xxxxxxyyyyyyzzzzz'})
@events = @event_list["events"]["event"]
这个Ruby代码继承了HTTParty的方法,我需要在控制器的顶部。视图代码显示数据正常,因此问题是我无法将其移动到Javascript文件。
我希望得到一些建议,如果有更好的方法将信息从Ruby传递给Javascript,或者我应该怎么做。感谢
答案 0 :(得分:3)
我认为您的问题是您应该将json与数组一起使用。尝试使用array.to_json
。
How can I use JavaScript to parse Ruby JSON string
一旦转换为json,它应该是可迭代的。
答案 1 :(得分:3)
尝试使用gon gem。 Ryan bates展示了如何使用它并提供了将ruby对象传递给javascript的其他选项:
http://railscasts.com/episodes/324-passing-data-to-javascript
顺便问一下,您是否尝试使用inspect元素来确保插入元素的ID是正确的?