Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “setInterval”是否阻止用户键入?_Javascript_Jquery_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Javascript “setInterval”是否阻止用户键入?

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

我在我的web应用程序中创建了聊天系统。
这是一个基本的聊天功能,带有输入字段和消息

我只包装了一部分消息,然后使用
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 %>);