我已经设置了一个简单的演示应用程序(用户和消息)来测试使用jQuery,Ajax和Rails在一起。这个想法是,当您在用户索引页面上将用户行鼠标悬停时,该页面将使用Ajax来加载该用户的第一条消息。这在功能上“有效”,但每次鼠标悬停时,获取数据的服务器GET请求的数量加倍,直到页面变慢。任何人都可以帮我弄清楚为什么会发生这种情况?jQuery ajax请求Rails服务器每次翻倍
,显示输出的用户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代码(在资产/ 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
最后的HTML响应页面(first_message.html.erb)为Ajax请求如下:
<h3> <%= @user.name %>'s first message: </h3>
<% if @user.messages.length > 0 %>
<%= @user.messages[0].content %>
<% else %>
...
<% end %>
有什么想法?
是的,就是这样,谢谢! – Perikles