Проверка на ново съобщение с AJAX

  • Автор Автор emagi
  • Начална дата Начална дата

emagi

Registered
Здравейте!
Направих един сайт, в който потребителите могат да оставят, един на друг, съобщения.Искам, когато потребителя се логне, при наличие на НЕпрочетено съобщение, да се визуализира един DIV, в който да пише колко непрочетени съобщения има!Значи, ето и 4-те файла, които ползвам:
-zxmls.js - библиотека,чрез която създавам XMLHttp обект
-CheckComment.php - php файла, който проверява за ново съобщение
-CommentChecker.js - това е файла, който през определен интервал от време стартира функцията checkComments, и при наличие на ново(и) съобщение(я) създава слой.
-PeriodicRefresh.css- файла, чрез който задавам стил на дива
и съответно файла example.php, в който фактически трябва да се визуализира DIV-a,ако има новинки.
Ето и съоветно тяхното съдържание:
example.php
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>Home page</title>
        <script type="text/javascript" src="Scripts/zxml.js"></script>
        <script type="text/javascript" src="Scripts/CommentChecker.js"></script>
        <link rel="stylesheet" type="text/css" href="css/PeriodicRefresh.css" />
    </head>
    <body>
        <p>Prowerka</p>
    </body>
</html>
Ето го и файла е CheckComments.php
Код:
header("Cache-control: No-Cache");
    header("Pragma: No-Cache");
    
    //database information
    $sDBServer = "localhost";
    $sDBName = "xxx";
    $sDBUsername = "xxx";
    $sDBPassword = "xxx";

    //create the SQL query string
      $oLink = mysql_connect($sDBServer,$sDBUsername,$sDBPassword);
      @mysql_select_db($sDBName) or die("-1|| || ");
    $sSQL = "select * from message where touser='emagi' and unread='unread'";
      $query = mysql_query($sSQL) or die("-1|| || ");
      $num = mysql_num_rows($query);
      if($num > 0) {
        $sResult = mysql_fetch_array($query);
        echo $num."||".$sResult['touser'];
    } else {
        echo "-1|| || ";
    }
    
    @mysql_free_result($oResult);
    @mysql_close($oLink);
Ако стартирам само този файл в броузъра, ми излиза:
.
Така, ето го и проблемният CommentChecker.js
var oXmlHttp = null;
var iInterval = 1000;
var iLastCommentId = -1;
var divNotification = null;
var blnRequestsEnabled = true;

function checkComments() {

if (blnRequestsEnabled) {
try {
if (!oXmlHttp) {
oXmlHttp = zXmlHttp.createRequest();
} else if (oXmlHttp.readyState != 0) {
oXmlHttp.abort();
}

oXmlHttp.open("get", "../CheckComments.php", true);
oXmlHttp.onreadystatechange = function () {

if (oXmlHttp.readyState == 4) {
if (oXmlHttp.status == 200) {

var aData = oXmlHttp.responseText.split("||");
if (aData[0] != iLastCommentId) {

if (iLastCommentId != -1) {
showNotification(aData[1], aData[0]);
}
}
setTimeout(checkComments, iInterval);
} else {
throw new Error("An error occurred while making the request.");
}
}
};

oXmlHttp.send(null);
} catch (oException) {
blnRequestsEnabled = false;
}
} //End: if
}

function showNotification(sName, sNum) {
if (!divNotification) {
divNotification = document.createElement("div");
divNotification.className = "notification";
document.body.appendChild(divNotification);
}

divNotification.innerHTML = "Hi," + sName+ "<br />?????" + sNum +"e-mails";
divNotification.style.top = document.body.scrollTop + "px";
divNotification.style.left = document.body.scrollLeft + "px";
divNotification.style.display = "block";
setTimeout(function () {
divNotification.style.display = "none";
}, 5000);
}

//if Ajax is enabled, assign event handlers and begin fetching
window.onload = function () {
if (zXmlHttp.isSupported()) {
checkComments();
}
};
Общо взето правя заявка, "вземам" резултата от проверка на CheckComment.php, чрез функцията spilt разделям резултата, като го присвоявам на елементите от масива aData.
Проблема е следния:като стартирам файла example.php(аз имам една преставка на FireFox,казва се FireBug,която ми дава грешките на даден сайт).Ето какво ми дава на мен при стартиране на example.php:
[Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://sou.host-bg.info/Scripts/CommentChecker.js :: anonymous :: line 22" data: no]
[Break on this error] if (oXmlHttp.status == 200) {
 
Не!Иначе php файла си работи,обаче този CommentChecker.js нещо неще!
 
emagi каза:
Не!Иначе php файла си работи,обаче този CommentChecker.js нещо неще!

Държиш ли си на твоите файлчета, или искаш да ти тези които ползвам аз.
Там предполагам няма да имаш проблеми?
 
Въпроса ми е да оправя това,което имам, за да го разбера.Иначе с удоволствие ще погледна и твоите!
 
Стана, само това което ме дразни е че таз представка постоянно отброява тази грешка, а при IЕ няма проблем!Ще го оставя така..........
 
emagi каза:
Стана, само това което ме дразни е че таз представка постоянно отброява тази грешка, а при IЕ няма проблем!Ще го оставя така..........

Сега си инсталирах този. Забелязах, че и на мен ми дава такава грешка, и то във всички сайтове.
 
Я ми кажи,как мога да кирилизирам текст в .js файл!Говоря конкретно за CommentChecker.js
Не говоря за javascript код в html документ, а за външен .js файл!
 

Back
Горе