1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
var lastMsgId=-1; // à l'arrivée sur le tchat, ajax renvoi cet id message pour récupérer un éventuel historique des messages
var chatURL="monfichier.php"; // ce fichier renvoie un tableau json_encodé de la forme:
// data[clear] drapeau pour id début de lecture BDD dépendant de table SQL vide ou non
// data[messages] tableau relatif au(x) nouveau(x) message(s) obetnu(s)
// data[messages][pseudo] pseudo expéditeur
// data[messages][id] id du message dans la table SQL
// data[messages][message] message envoyé
// data[messages][time] date_heure du message
function getNewMsg()
{ $.ajax(
{ url : chatURL, // variable définie en tête de script sur php renvoyant le(s) dernier(s) message(s) en JSON
type : 'POST',
data : $.param( { mode : 'getMsg', id : lastMsgId } ),
dataType : 'json',
error : function(xhr , textStatus, errorThrown)
{ alert('erreur');
displayError(textStatus); // pas de problème
},
success : function(retour)
{ if(retour.errno!=null) displayPHPError(retour); //pas de problème
else readMsg(retour); // fonction d'affichage de la réponse
getmsg_interval=setTimeout("getNewMsg();",updInterval);
}
});
}
// envoi d'un message
function sendMsg()
{ var msg='';
var pseudo=$.trim($('#pseudo').val()); // champs caché
var msg=$.trim($('#msgBox').val()); // champs de saisie de message
$('#msgBox').val("");
$('#msgBox').focus();
var params={
mode :"sendMsg",
id :lastMsgId,
pseudo : pseudo,
message : msg
}
if(msg!='')
{ $.ajax(
{ url: chatURL,
type: "POST",
data: $.param(params),
dataType: 'json',
error : function(xhr , textStatus, errorThrown)
{ displayError(errorThrown);},
success: function(retour, textStatus)
{ if(retour.errno!=null) displayPHPError(retour);
else readMsg(retour);
//getmsg_interval=setTimeout("getNewMsg();",updInterval); // avec ou sans, le problème est le même
}
})
}
}
function readMsg(data)
{ clearChat=data.clear; // drapeau pour réinit id de dernier message
if(clearChat) // si init demandée
{ $("#scroll")[0].innerHTML=""; // vidage du div "#Scrollmsg"
lastMsgId=-1; //réinit du drapeau
}
if(data.messages.length>0) // si nouveau messages
{ if(lastMsgId > data.messages[0].id) return;
lastMsgId=data.messages[data.messages.length-1].id; // l'id = id du dernier message arrivé
}
$.each(data.messages,function(i,message)
{ var str='';
str+='<div>'+message.time+'['+message.pseudo+']: '+message.message+'</div>';
})
divCible=$('#scroll'); // zone d'affichage du message
var isScrolledDown=( divCible[0].scrollHeight - divCible[0].scrollTop<= divCible[0].offsetHeight); // calcul pour hauteur de div/messages
divCible[0].innerHTML+=str;
divCible[0].scrollTop= isScrolledDown ? divCible[0].scrollHeight : divCible.scrollTop; // forçage descente scrollbar
} |
Partager