J'ai construit un ajax discuter dans un de mon site Web de mvc. tout fonctionne bien. J'utilise le sondage. À un certain intervalle, j'utilise $ .post pour obtenir les messages de la base de données. Mais il y a un problème. Le message récupéré à l'aide de $ .post ne cesse de se répéter. Voici mon code javascript et la méthode du contrôleur.ASP.NET MVC ajax chat
var t;
function GetMessages() {
var LastMsgRec = $("#hdnLastMsgRec").val();
var RoomId = $("#hdnRoomId").val();
//Get all the messages associated with this roomId
$.post("/Chat/GetMessages", { roomId: RoomId, lastRecMsg: LastMsgRec }, function(Data) {
if (Data.Messages.length != 0) {
$("#messagesCont").append(Data.Messages);
if (Data.newUser.length != 0)
$("#usersUl").append(Data.newUser);
$("#messagesCont").attr({ scrollTop: $("#messagesCont").attr("scrollHeight") - $('#messagesCont').height() });
$("#userListCont").attr({ scrollTop: $("#userListCont").attr("scrollHeight") - $('#userListCont').height() });
}
else {
}
$("#hdnLastMsgRec").val(Data.LastMsgRec);
}, "json");
t = setTimeout("GetMessages()", 3000);
}
et voici ma méthode du contrôleur pour obtenir les données:
public JsonResult GetMessages(int roomId,DateTime lastRecMsg)
{
StringBuilder messagesSb = new StringBuilder();
StringBuilder newUserSb = new StringBuilder();
List<Message> msgs = (dc.Messages).Where(m => m.RoomID == roomId && m.TimeStamp > lastRecMsg).ToList();
if (msgs.Count == 0)
{
return Json(new { Messages = "", LastMsgRec = System.DateTime.Now.ToString() });
}
foreach (Message item in msgs)
{
messagesSb.Append(string.Format(messageTemplate,item.User.Username,item.Text));
if (item.Text == "Just logged in!")
newUserSb.Append(string.Format(newUserTemplate,item.User.Username));
}
return Json(new {Messages = messagesSb.ToString(),LastMsgRec = System.DateTime.Now.ToString(),newUser = newUserSb.ToString().Length == 0 ?"":newUserSb.ToString()});
}
Tout fonctionne absloutely parfait. Mais j'ai des messages qui se répètent. La première fois que la page est chargée, je récupère les données et appelle la fonction GetMessages(). Je charge la valeur du champ hdnLastMsgRec la première fois que la page se charge et après que la valeur de ce champ est définie par le javascript.
Je pense que le message ne cesse de se répéter en raison d'appels asynchrones. Je ne sais pas, peut-être que vous pouvez m'aider à résoudre ça.
ou vous pouvez suggérer une meilleure façon de l'implémenter.
J'étais curieux de savoir quel type d'interrogation vous utilisez. – Ciel