我在我的网络应用程序中制作了聊天系统 这是与输入字段和消息的基本聊天。
我只包装了messages_section然后我使用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>
HTML
<form accept-charset="UTF-8" action="/communities/new_comments" class="new_comment" data-remote="true" id="new_comment" method="post">
<input class="chat" id="input" name="comment[body]" type="text" />
<button type="submit" class="btn">submit</button>
<form>
<span id="messages_section">
here comes messages!
</span>
setinterval_part.js.erb
$('#messages_section').html("<%= j(render(:partial => 'communities/comment')) %>");
<% if @post %>$('#body_input').val('');<% end %>
communities_controller.rb
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
答案 0 :(得分:2)
首先,我建议你不要在这种情况下使用setInterval。如果您的服务器需要1秒以上的时间才能回复客户端怎么办?我认为您可以直接从refreshPartial()
运行setinterval_part.js.erb
功能。
所以你需要在视图中对JS-part进行这些更改:
jQuery(document).ready(function () {
refreshPartial();
});
function refreshPartial() {
$.ajax({
url: "/communities/setinterval_part?page=",
type: "GET",
dataType: "script",
});
}
这是setinterval_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 %>);