当我点击我网站上的聊天时,我希望从服务器中获取消息,因此我使用$ .post请求,如下所示:
$("#friendsDiv").on("click", "#aFriend", function(event){
retrieveMessages();
}
这就是retrieveMessages
函数
$.post("PHP/chat.php",
{
action:'retrieveMessages',
last_message: last_message,
conversation_id:conversation_id
},
function(data){
$("#messages").append(data);
last_message = $("#messages").find(".aMessage:last").attr("id");
$("#messages").animate({ scrollTop: $("#messages")[0].scrollHeight}, 1000);
}
);
问题在于,如果在更新last_message之前非常快速地点击按钮,将会开始多个帖子请求,这会导致显示相同消息的许多副本。有没有办法阻止快速点击按钮,或者如果已经处理了另一个相同的请求,则停止正在处理的帖子请求?
EDIT
#aFreind
元素是DIV而不是按钮
答案 0 :(得分:0)
您最好的选择是禁用按钮,然后在$.post
$("#friendsDiv").on("click", "#aFriend", function(event) {
$(this).prop('disabled', true); // disable
retrieveMessages();
});
和retrieveMessage
函数
$.post("PHP/chat.php", {
action: 'retrieveMessages',
last_message: last_message,
conversation_id: conversation_id
}, function(data) {
$("#messages").append(data);
last_message = $("#messages").find(".aMessage:last").attr("id");
$("#messages").animate({
scrollTop: $("#messages")[0].scrollHeight
}, 1000);
$(this).prop('disabled', false); // enable it again
});
答案 1 :(得分:0)
通常在这种情况下,您只需禁用按钮,直到请求完成。为此,您需要提供回调函数。例如:
$("#friendsDiv").on("click", "#aFriend", function (event) {
// reference the button
var button = this;
// disable the button
this.disabled = true;
// provide a callback to be invoked when post is done
retrieveMessages(function() {
button.disabled = false;
});
});
function retrieveMessages(callback) {
$.post("PHP/chat.php", {
action: 'retrieveMessages',
last_message: last_message,
conversation_id: conversation_id
}, function (data) {
$("#messages").append(data);
last_message = $("#messages").find(".aMessage:last").attr("id");
$("#messages").animate({
scrollTop: $("#messages")[0].scrollHeight
}, 1000);
// execute callback which enables button again
callback();
});
}
答案 2 :(得分:0)
您可以使用一个 jQuery函数并在回调中再次绑定按钮,而不是使用 on 。 Se http://api.jquery.com/one/
$("#friendsDiv").one("click", "#aFriend", retrieveMessages });
var retrieveMessages = function(){
$.post("PHP/chat.php", {
...
}).done(function(){
$("#friendsDiv").one("click", "#aFriend", retrieveMessages });
});
};