Ciao a tutti! Mi sto avvicinando al mondo AJAX vista la mia necessità di costruire una chat.
Ho trovato in internet alcuni esempi ed ho modificato uno che originariamente scriveva la lista dei messaggi in un file html. La mia modifica consiste nel scrivere i messaggi in una tabella mssql.
questo è il codice della pagina principale:
<?php
session_start();
include("../../_inc/funzphp.inc");
// include il file della lingua
if (empty($_COOKIE["Lingua"])) {
$_COOKIE["Lingua"] = "it";
}
$Lingua = Trim($_COOKIE["Lingua"]);
if (empty($Lingua)) {
$_COOKIE["Lingua"] = "it";
$Lingua="it";
}
include_once "Lang/index." . $Lingua . ".php";
if (isset($_GET["u"])){
unset($_SESSION["agr_nickname"]);
}
// Process login info
if (isset($_POST["submitBtn"])){
$name = isset($_POST["name"]) ? $_POST["name"] : "Unnamed";
$_SESSION["agr_nickname"] = $name;
}
$nickname = isset($_SESSION["agr_nickname"]) ? $_SESSION["agr_nickname"] : "Hidden";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Chat by Agrelma</title>
<link href="style/style.css" rel="stylesheet" type="text/css" />
<script language="javascript" type="text/javascript">
<!--
var httpObject = null;
var link = "";
var timerID = 0;
var nickName = "<?php echo $nickname; ?>";
// Get the HTTP Object
function getHTTPObject(){
if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest) return new XMLHttpRequest();
else {
alert("Your browser does not support AJAX.");
return null;
}
}
// Change the value of the outputText field
function setOutput(){
if(httpObject.readyState == 4){
var response = httpObject.responseText;
var objDiv = document.getElementById("result");
objDiv.innerHTML += response;
objDiv.scrollTop = objDiv.scrollHeight;
var inpObj = document.getElementById("msg");
inpObj.value = "";
inpObj.focus();
}
}
// Change the value of the outputText field
function setAll(){
if(httpObject.readyState == 4){
var response = httpObject.responseText;
var objDiv = document.getElementById("result");
objDiv.innerHTML = response;
objDiv.scrollTop = objDiv.scrollHeight;
}
}
// Implement business logic
function doWork(){
httpObject = getHTTPObject();
if (httpObject != null) {
link = "message.php?nick="+nickName+"&msg="+document.getE lementById('msg').value;
httpObject.open("GET", link , true);
httpObject.onreadystatechange = setOutput;
httpObject.send(null);
}
}
// Implement business logic
function doReload(){
httpObject = getHTTPObject();
var randomnumber=Math.floor(Math.random()*10000);
if (httpObject != null) {
link = "message.php?all=1&rnd="+randomnumber;
httpObject.open("GET", link , true);
httpObject.onreadystatechange = setAll;
httpObject.send(null);
}
}
function UpdateTimer() {
doReload();
timerID = setTimeout("UpdateTimer()", 5000);
}
function keypressed(e){
if(e.keyCode=='13'){
doWork();
}
}
//-->
</script>
</head>
<body onload="UpdateTimer();">
<div id="main">
<div id="caption">Chat by Agrelma</div>
<?php
// preleva i dati passati
$Nuovo = "";
if (!empty($_GET["Nuovo"])) { $Nuovo = $_GET["Nuovo"]; }
// controllo se è il primo accesso
if ($Nuovo = "SI") {
$_SESSION["agr_ChatCod"] = CreaCodice("C");
$_SESSION["agr_ChatIDDest"] = $_GET["IDDest"];
$_SESSION["agr_ChatIDMitt"] = "0";
$_SESSION["agr_ChatDest"] = $_GET["NomeDest"];
$_SESSION["agr_nickname"] = $Ph1;
} else {
/* $name = isset($_POST["name"]) ? $_POST["name"] : "Unnamed";
$_SESSION["agr_nickname"] = $name;*/
}
?>
<div id="result">
</div>
<div id="sender" onkeyup="keypressed(event);">
<?php echo $Ph2?> <input type="text" name="msg" size="30" id="msg" />
<button onclick="doWork();"><?php echo $Ph3?></button>
</div>
</div>
</body>
... e questo è il codice del file message.php:
<?php
session_start();
// include i dati del db e si collega
include("../../_inc/dbphp.inc");
$Conn = mssql_connect($DB_database,$DB_username,$DB_passwo rd) or die("ERROR: database error.");
mssql_select_db("agrelma") or die("ERROR: database requested not exists");
if (isset($_GET['msg'])) { // scrittura messaggio nel db
$msg = str_replace(Chr(34), "", str_replace("'", "", $_GET['msg']));
$line = "
<span class=\"name\">[" . date("G:i") . "] " . $_SESSION["agr_nickname"] . ": </span><span class=\"txt\">$msg</span></p>";
$mySQL = "INSERT INTO ChatMessaggi (Codice, DataOra, Messaggio, Letto, NomeDest, IDDest, ChiScrive) VALUES ('" . $_SESSION["agr_ChatCod"] . "', '00000000000000',
'" . $line . "', 0, '" . $_SESSION["agr_ChatDest"] . "', " . $_SESSION["agr_ChatIDDest"] . ", " . $_SESSION["agr_ChatIDMitt"] . ")";
mssql_query($mySQL);
echo $line;
} else if (isset($_GET['all'])) { // lettura dei messaggi dal db
$mySQL = "SELECT Messaggio FROM ChatMessaggi WHERE Codice='" . $_SESSION["agr_ChatCod"] . "' ORDER BY DataOra";
$myRs = mssql_query($mySQL);
$content = "";
while($myRecs = mssql_fetch_array($myRs)) {
$content .= $myRecs["Messaggio"];
}
mssql_free_result($myRs);
$mySQL = "UPDATE ChatMessaggi SET Letto=1 WHERE Codice='" . $_SESSION["agr_ChatCod"] . "' AND Letto=0";
mssql_query($mySQL);
echo $content;
}
// chiude il db
mssql_close($Conn);
?>
Non riesco a capire come mai readystate nella funzione SetAll() assume il valore "4" dopo la chiamata a message.php e invece readystate nella funzione SetOption() non assume mai il valore "4" dopo la chiamata a message.php.
AIUTO!!..