0

我一直在制作聊天应用程序,使用 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.chatclearInterval 很好,它确实停止了间隔,唯一的问题是当我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"
4

0 回答 0