我一直在制作聊天应用程序,使用 AJAX 定期获取聊天数据。这是检索聊天的代码:
$("li.chat-agent").click (e) ->
e.preventDefault()
$("#text-area").animate({ scrollTop: $('#text-area')[0].scrollHeight}, 1000)
unless retrieving_id
retrieving_id = true
$("#chat-area").show()
id = $(this).attr("id")
chat_interval = window.setInterval (->
$.ajax({
type: 'GET'
url: 'user/chat/get'
cache: false
timeout: time
dataType: 'json'
data:
'id': id
}).done (msg) ->
$("#text-area").empty().append msg
.fail (response) ->
alert "Chat box fail to generate."
), 2000
$('a.chat').click (e) ->
window.clearInterval(chat_interval)
retrieving_id = false
else
alert "Please wait until box is generated."
一切正常,除了什么时候$('a.chat')
应该清除间隔,它没有按预期工作。当我再次单击它时,li.chat-agent
它创建了两个完全相同的间隔而不是一个(发送了 2 个相同的 GET 请求)。如果我li.chat-agent
再次单击它(即使在我用 清除了间隔之后a.chat
),它将发出三个请求。
注意:a.chat
clearInterval 很好,它确实停止了间隔,唯一的问题是当我li.chat-agent
再次点击时它会添加请求。
预期结果是再次li
单击 时更新间隔。
任何人都可以帮助我吗?谢谢(顺便说一句,代码在coffeescript中,如果有的话)
编辑
通过修改解决了这个问题:
$("li.chat-agent").click (e) ->
e.preventDefault()
id = $(this).attr("id")
$("#text-area").animate({ scrollTop: $('#text-area')[0].scrollHeight}, 1000)
unless retrieving_id
retrieving_id = true
$("#chat-area").show()
id = $(this).attr("id")
chat_interval = window.setInterval (->
$.ajax({
type: 'GET'
url: 'user/chat/get'
cache: false
timeout: time
dataType: 'json'
data:
'id': id
}).done (msg) ->
$("#text-area").empty().append msg
retrieving_id = false
.fail (response) ->
alert "Chat box fail"
), 2000
$('a.chat, li.chat-agent').click (e) ->
window.clearInterval(chat_interval)
$("li.chat-agent#"+id).unbind('click')
else
alert "CB Generated"