Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] Shout
Forum PHP.pl > Forum > Przedszkole
wizard144
Zrobiłem shoutbox który odświeżam za pomocą Crona co 5 sekund. Niestety wygląda to dosyć mało estetycznie.

Wiem że powinienem zajrzeć do dokumentacji Ajaxa ale problem w tym że z advAjax nic nie rozumiem -> brak podstaw js.

Czy mógłby mnie ktoś nakierować ? Wiem że setInterval jest tu niezbędne ale interesują mnie zapytania jquery. Jak to zrobić aby zżeralo jak najmniej "trasferu"... żeby po prostu nie muliło.

Pozdrawiam!
v1t4n
ja zrobilem sobie funkcje rekurencyjna:

Kod
function shoutbox(){
    var boxik = getById('sb'); //id diva do ktorego ladujesz tresc shoutboxa
    advAJAX.get({
        url: "modules/shoutbox.php", //plik php ktory generuje zawartosc shoutboxa
        onSuccess : function(obj) {
            boxik.innerHTML = obj.responseText; //podstawianie sciagnietego textu
            boxik.style.overflow = 'auto'; //pierduly zeby sie na FF nie rypalo
            setTimeout("shoutbox()", 10000); //interwał wpisz sobie sam :), ja mam 10 sekund
        },
        onError : function(obj) { alert("Error: " + obj.status); }
    });
}


funkcje trzeba zaladowac do body eventem onload.


PS
moge ci udostepnic również funkcję do dodawania nowych wpisów w shoutboxie
wizard144
Nowe wpisy dodaje sobie w osobnym Ifram-e smile.gif Zawsze jakieś rozwiązanie, fakt że toporne ale jednak smile.gif

PS.

Dzięki za funkcję, zaraz wypróbuję jak będzie działała smile.gif

Próbowałem to dostosować do Iframe-a którego mam

CODE


<iframe width=\"510\" height=\"500\" name=\"shout\" src=\"shoutbox/klub.php?nr=$nr&f=$funkcja\" valign=\"top\" border=\"0\" id='sb' onload=\"shoutbox()\">
Twoja przeglądarka nie obsługuje ramek
</iframe>



CODE

<?php
require_once('******.***'); // ładujemy połączenie z bazą smile.gif

$funkcja=mysql_real_escape_string(htmlspecialchars($_GET['f'])); //zmienna funkcji
$nr=mysql_real_escape_string(htmlspecialchars($_GET['nr'])); // zmienne nr pokoju
?>


<html>
<head>
<meta http-equiv="Refresh" content="5"> // TEGO MUSZĘ SIĘ POZBYĆ smile.gif
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script>
function shoutbox(){ // Twoja funkcja smile.gif
var boxik = getById('sb'); //id diva do ktorego ladujesz tresc shoutboxa
advAJAX.get({
url: "klub.php?nr=<?php echo $nr; ?>&f=<?php echo $funkcja; ?>", //plik php ktory generuje zawartosc shoutboxa
onSuccess : function(obj) {
boxik.innerHTML = obj.responseText; //pierduly zeby sie na FF nie rypalo
boxik.style.overflow = 'auto'; //jw
setTimeout("shoutbox()", 5000); //interwał wpisz sobie sam smile.gif, ja mam 10 sekund
},
onError : function(obj) { alert("Error: " + obj.status); }
});
}
</script>
</head>
<body bgcolor="black" onload="shoutbox();">
<center>
<div id='sb'>

//dalsza część kodu -> tabele itd (wszystko co pobiera z bazy danych)
</div>
</center>
</body>
</html>





Tak to u mnie by wyglądało...

Co Ty na to ?
v1t4n
Nie napisales czy masz blad ale ja na twoim miejscu odszedlbym od ramek:

Pokaze ci co ja mam i jak mi to dziala

shoutbox.js:
Kod
function shoutbox(){
    var boxik = getById('sb');
    //alert('dupa');
    advAJAX.get({
        url: "modules/shoutbox.php",
        onSuccess : function(obj) {
            boxik.innerHTML = obj.responseText;
            boxik.style.overflow = 'auto';
            setTimeout("shoutbox()", 10000);
        },
        onError : function(obj) { alert("Error: " + obj.status); }
    });
    //boxik.innerHTML = a
}

function shoutboxAddText(){
    var texcik = getById('inText');
    advAJAX.get({
        url: "modules/shoutbox_add_text.php",
        parameters: {
            'PHPSESSID' : getCookie('PHPSESSID'),
            'text' : texcik.value
        },
        onSuccess : function(obj) {
            shoutbox();
            texcik.value = '';
        },
        onError : function(obj) { alert("Error: " + obj.status); }
    });
}


index.php (w body nadal zostaje onload="shoutbox()";):
  1. <div class="shoutbox" id="sb"></div>
  2.            <div class="shoutbox-3">
  3.                <?php
  4.                    if ($_SESSION['logged_in']) {
  5.                        print '
  6.                        <form>
  7.                            <input type="text" style="width:200px;" id="inText"/><br/>
  8.                            <input type="button" value="Dodaj" onClick="shoutboxAddText();"/>
  9.                        </form>';
  10.                    } else print 'Musisz się zalogować by móc bluzgać na Shoutboxie.'
  11.                ?>
  12.            </div>


shoutbox.php:
  1. <?php
  2. $sql1 = "SELECT s.author, u.nickname, s.text, (SELECT COUNT(f.id) FROM files_info f WHERE f.author = s.author) AS uc FROM `shoutbox` s, users u WHERE u.id = s.author ORDER BY s.`id` DESC LIMIT 0,20";
  3. $sql2 = mysql_query($sql1);
  4. $a=1;
  5. while($row = mysql_fetch_array($sql2)){
  6.    print '<div class="shoutbox-'.($a%2).'">'.user_link($row[1], $row[0], $row[3]).': '.$row[2].'</div>';
  7.    $a++;
  8. }
  9. ?>


shoutbox_add_text.php:
  1. <?php
  2. $login = $_SESSION['login'];
  3. $pass = $_SESSION['password'];
  4. if (!empty($login)&&!empty($pass)) {
  5.    $user = mysql_fetch_row(mysql_query("SELECT `user` FROM `accounts` WHERE MD5(`login`) = '$login' AND MD5(`password`) = '$pass' LIMIT 0,1"));
  6.    if ($user[0]) {
  7.        $text = $_GET['text'];
  8.        if (!empty($text)) {
  9.            $datestamp = mktime();
  10.            $asd = mysql_query("INSERT INTO `shoutbox` (`author`, `text`, `date`) VALUES ('$user[0]', '$text', $datestamp)");
  11.            $xaxa = $asd == true ? '1' : '5';
  12.            print $xaxa;
  13.        } else print '4';
  14.    } else print '3';
  15. } else print '2';
  16. ?>


shoutbox_add_text zwraca wartosc 1 jesli wszystko dziala - jesli cos nie dziala to mozna latwo podejzec co po nr bledu smile.gif

shoutbox.css:
Kod
div.shoutbox {
    border:2px solid #777;
    width:200px;
    height:350px;
    background-color:#eee;
    overflow:auto;
}

div.shoutbox-1 {
    padding:2px;
    background-color:#ccc;
}
div.shoutbox-0 {
    padding:2px;
    background-color:#ddd;
}

div.shoutbox-3 {
    width:204px;
    color:#eee;
}


tabela w bazie:
id (INDEX, smallint, auto_increment)|author (tinyint)|text (text)|date (int)


Potrzebujesz jeszcze advAjaX i funkcje w JS do ciastek:
Kod
function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}
wizard144
Widzisz, ja w ogóle advAjaxa nie zaincludowałem. To może być przyczyną ... W każdym bądź razie dzięki smile.gif może coś z tego stworze smile.gif

+ dla Ciebie smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.