【发布时间】:2011-11-04 17:45:38
【问题描述】:
我已经设置了一个简单的演示应用程序(包含用户和消息)来测试同时使用 jQuery、Ajax 和 Rails。这个想法是,当您将鼠标悬停在用户索引页面上的用户行上时,该页面将使用 Ajax 加载该用户的第一条消息。这在功能上是“有效的”,但是每次鼠标悬停时服务器获取数据的 GET 请求数量会翻倍,直到页面变慢到爬行为止。谁能帮我弄清楚为什么会这样?
显示输出的用户 index.html.erb 如下所示:
...
<% @users.each do |user| %>
<tr class="user_name" id="<%=user.id %>">
<td><%= user.name %></td>
<td><%= user.email %></td>
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, confirm: 'Are you sure?', method: :delete %></td>
</tr>
<% end %>
</table>
<div id="first_message"></div>
...
我的基于 jQuery 的 Ajax 代码(在 assets/ajax.js 中)如下所示:
$(document).ready(function () {
$('.user_name').mouseover(function() {
var userId = $(this).attr('id');
$('#first_message').load(window.location + userId + "/first_message");
});
});
我添加了以下路由来处理消息加载:
match 'users/:id/first_message' => 'users#first_message'
处理请求的控制器如下所示:
class UsersController < ApplicationController
def first_message
@user = User.find(params[:id])
respond_to do |format|
format.html # first_message.html.erb
end
end
最后,Ajax 请求的 html 响应页面 (first_message.html.erb) 如下所示:
<h3> <%= @user.name %>'s first message: </h3>
<% if @user.messages.length > 0 %>
<%= @user.messages[0].content %>
<% else %>
...
<% end %>
有什么想法吗?
【问题讨论】:
标签: jquery ruby-on-rails ajax