我有这个代码从数据库中提取新消息, 问题是:有时ajax请求花费的时间太长,并且它会将相同的消息拉两次。
将间隔设置为较长时间有一个简单的结果,但即使我会做很长时间(约5秒),它有时也可能会出现同样的问题。
如何确保不再发生任何想法?
我认为最好的方法是检查getNewMessages是否在ajax请求的中间,如果是 - 避免发送另一个请求。
function getNewMessages() {
$.ajax({
url: "@string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"))Chat/GetNewMessages",
data: {
LastID: lastId
},
type: "POST",
dataType: "text",
success: function (text) {
var arr = jQuery.parseJSON(text);
var arrLength = arr.length;
if(arrLength != 0)
lastId = arr[arrLength - 1]["Id"];
for (i = 0; i < arrLength; i++) {
var extraClasses = "";
if (isUnicode(arr[i]["Message"])) {
extraClasses = "rtl";
}
if (arr[i]["UserID"] == UserID)
$(".messages").append("<div class='ownMessage messageNickname' id='" + arr[i]["Id"] + "'><div class='row nickname'><div class='col-md-12'>" + arr[i]["Nickname"] + "</div></div><div class='row message " + extraClasses + "'><div class='col-md-12'>" + arr[i]["Message"] + "</div></div></div>");
else
$(".messages").append("<div class='messageNickname' id='" + arr[i]["Id"] + "'><div class='row nickname'><div class='col-md-12'>" + arr[i]["Nickname"] + "</div></div><div class='row message " + extraClasses + "'><div class='col-md-12'>" + arr[i]["Message"] + "</div></div></div>");
}
if (arrLength > 0) {
$(".messages").animate({ scrollTop: $(".messages").prop("scrollHeight") }, 2000);
}
}
});
$(".messageNickname").dblclick(removeMessage);
}
setInterval(getNewMessages, 2000);
答案 0 :(得分:0)
使用标志变量。
var doingRequest = false;
function getNewMessages() {
if (!doingRequest) {
$.ajax({
beforeSend: function(){
doingRequest = true;
},
complete: function(){
doingRequest = false;
}
});
}