Javascript “setInterval”是否阻止用户键入?
我在我的web应用程序中创建了聊天系统。Javascript “setInterval”是否阻止用户键入?,javascript,jquery,ruby-on-rails,ruby-on-rails-3,Javascript,Jquery,Ruby On Rails,Ruby On Rails 3,我在我的web应用程序中创建了聊天系统。 这是一个基本的聊天功能,带有输入字段和消息 我只包装了一部分消息,然后使用setInterval每1秒部分加载一次。 然而,我在这里发现了奇怪的行为 当我在输入字段中键入内容时,每次加载setInterval时,都会以某种方式输入键入的单词 现在看来,这只会影响FireFox的浏览:( 我假设setInterval不会影响输入字段,除非输入字段设置在 这些是我的代码。我想知道为什么以及如何修复 jQuery <script type="text/j
这是一个基本的聊天功能,带有输入字段和消息 我只包装了一部分消息,然后使用
setInterval
每1秒部分加载一次。然而,我在这里发现了奇怪的行为 当我在输入字段中键入内容时,每次加载
setInterval
时,都会以某种方式输入键入的单词
现在看来,这只会影响FireFox的浏览:(
我假设setInterval
不会影响输入字段,除非输入字段设置在
这些是我的代码。我想知道为什么以及如何修复
jQuery
<script type="text/javascript">
//<![CDATA[
jQuery(document).ready(function () {
refreshPartial();
setInterval(refreshPartial, 1000)
});
function refreshPartial() {
$.ajax({
url: "/communities/setinterval_part?page=",
type: "GET",
dataType: "script",
});
}
//]]>
</script>
首先,我建议您在这种情况下不要使用setInterval。如果您的服务器响应客户端需要1秒以上怎么办?我认为您可以直接从
setInterval\u part.js.erb
运行refreshPartial()
函数
因此,您需要在视图中对JS部分进行以下更改:
jQuery(document).ready(function () {
refreshPartial();
});
function refreshPartial() {
$.ajax({
url: "/communities/setinterval_part?page=",
type: "GET",
dataType: "script",
});
}
然后将其发送到setinterval\u part.js.erb
:
$('#messages_section').html("<%= j(render(:partial => 'communities/comment')) %>");
<% if @post %>$('#body_input').val('');<% end %>
<% timeout_ms = 1000 %>
<% # some code that can determine current load of your server and increase timeout_ms %>
setTimeout(refreshPartial, <%= timeout_ms %>);
$('#messages_section').html(“'communities/comment'))%>”;
$('正文输入').val('');
设置超时(刷新部分,);
谢谢你的回答。你的意思是我必须放弃赛特间隔?我只是想让它像聊天系统一样。当用户坐着看到PC屏幕时,消息会自动弹出。我的变体也会这样做,因为它会在收到新消息后一次又一次地运行refreshPartial()。此外,它最终可能会对您的web服务器进行DDoS攻击,因此我认为您可以将setTimeout()添加到setinterval_part.js.erb(我将更新我的答案以显示这一点)感谢您提供的宝贵信息:)第4行呢?我可以留白吗?你的代码能正常工作吗?@SurgeryKuznetsov谢谢!!请让我确定你想对我说什么。我以前的代码允许用户继续请求,即使服务器已被完全访问且无法响应。但是当服务器没有响应时,您的代码将放弃访问。我的理解还可以吗?还有一条评论:我对我的答案做了一个小的修改-检查setinterval_part.js.erb的第5行-我在setTimeout:setTimeout(refreshPartial,)中删除了refreshPartial的括号;
def setinterval_part
@comments = @community.comment_threads.order("updated_at DESC").page(params[:page]).per(@number_of_comments_to_display)
@comment = @community.comment_threads.build
respond_to do |format|
format.js
end
end
jQuery(document).ready(function () {
refreshPartial();
});
function refreshPartial() {
$.ajax({
url: "/communities/setinterval_part?page=",
type: "GET",
dataType: "script",
});
}
$('#messages_section').html("<%= j(render(:partial => 'communities/comment')) %>");
<% if @post %>$('#body_input').val('');<% end %>
<% timeout_ms = 1000 %>
<% # some code that can determine current load of your server and increase timeout_ms %>
setTimeout(refreshPartial, <%= timeout_ms %>);