Autor Zpráva
Vilak
Profil
Zdravím, chci udělat online chat na webu a nevím, jak. Vytvořit formulář, jeho text vložit do databáze a poté ho z tama vybrat mi nedělá problém... Ale nevím jak to udělat, aby to šlo hned, tedy když napíšu něco, tak, aby se to prakticky hned objevilo (nebo třeba po 5ti sekundové lhůtě, to je jedno). Chci tedy, aby to bylo tak, že když někdo napíše komentář a nebo ho napíši já, tak aby to šlo vidět bez toho, aniž by se aktualizovala stránka. Jak to udělat? Podle mě půjde o JS, se kterým moc neumím. Dyštak mě ještě napadlo, že by to šlo udělat na "aktualizování stránky" (vlastně jen toho chatu) třeba každých těch 5 sekund, takže by se vždycky po pár sekundách objevila (ta zpráva).
Jednoduše: Chci vytvořit online chat a nevím jak udělat, aby se komentáře zobrazovali i bez toho, aniž bych musel aktualizovat stránku.
Za každou radu budu rád.
xROAL
Profil
Vilak:
Dyštak mě ještě napadlo, že by to šlo udělat na "aktualizování stránky" (vlastně jen toho chatu) třeba každých těch 5 sekund
Určite by ma nepotešilo keby píšem správu a v tom sa mi celá stránka refreshne. Šlo by sa tomu vyhnúť použitím rámov, čo je asi najjednoduchšie (aj keď zastaralé, ale funkčné) riešenie.

Podle mě půjde o JS, se kterým moc neumím.
Áno, pôjde o JS, konkrétne hľadaj AJAX. Nie je to nič prehnane komplikované.
Ak niečomu nebudeš rozumieť, alebo niečo dáš dokopy ale nebude to fungovať ako očakávaš, tak sa pokojne pýtaj ďalej, poradíme.
Hando
Profil
Ahoj.
Podle mého názoru se ti vymýšlet vlastní chat nevyplatí, pokud to nechceš dělat za účelem naučení se a máš na to dost času.
Technicky může jít o již zmíněný ajax, jinak se to řeší třeba pomocí websockets, což zase nemusí umožňovat každý hosting (v základu)...

Bylo by asi efektivnější použít (a třeba si upravit) nějaké již hotové řešení, do kterého již někdo svůj drahocenný čas vložil. :) Namátkově jsem koukal třeba na tohle a nevypadá to nijak špatně:
https://frug.github.io/AJAX-Chat/
Zechy
Profil
Hando:
websockets, což zase nemusí umožňovat každý hosting (v základu)
Přičemž na hostingu závisí, že se buď:
a) musí spustit php skript v nekonečné smyčce (a nesmí být omezen max_execution_time!), co bude nonstop naslouchat socketové komunikaci
b) musí se spustit program v kterémkoli jiném jazyce, co zvládne pracovat se sockety

O websocketech(v rámci PHP) jsem při své prvotní zkušenosti sepsal článek, když jsem jej dělal pro ročníkovou práci. Funguje to šikovně, ale je třeba dotyčný skript spustit přes příkazovou řádku s parametrem -q, aby jej neomezil právě execution time, který by jinak po určené době zabránil skriptu naslouchat příchozí komunikaci a ukončil by jej. (viz článek).
Vilak
Profil
Tak, udělal jsem to a už mi to funguje, ale pořád sa mi tam ukazuje jakási chyba o.O
mám soubor výpis-diskuze.php
<?php
require_once "../include/db.php";
$dotaz = mysql_query("SELECT *FROM `adminchat` ORDER BY `adminchat`.`id` DESC");
                        echo "<div id=\"achat_chat\">";
                        while ($vypis = mysql_fetch_assoc($dotaz)) {
                            echo "
                            <p>Vložil/a: <b>".$vypis['author']."</b></p>
                            ".$vypis['text']."
                            <hr>
                            ";
                        }
                        echo "</div>";
?>
a potom adminchat.php, kde mám
<script type="text/javascript" src="../js/jquery-1.11.2.min.js"></script>
    <script type="text/javascript">
        function refreshChat() {
        $.ajax({
                    type  : "POST",
                    url : "/scripty/vypis-diskuze.php",
                    data  : { argument1: "hodnota1", argument2: "hodnota2" }, // < GET PARAMETRE
                    success: function(data) { // < data = string, ktorý vrátil PHP skript
                    $("#achat_chat").html(data); // ALEBO, ak chces pridat:
                    $("#achat_chat").html($("#achat_chat").html + data);
                    },
                    fail: function(jqXHR, textStatus, errorThrown) { // < V pripade chyby
                            alert(textStatus);
                    }
                  });
        }
         var refreshint=setInterval(refreshChat, 5000);
    </script>
...
include "../scripty/vypis-diskuze.php";
a vypisuje mi to chybu (v prohlížeči): function (a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)}

tuto chybu to vypíše pokaždé (přepisuje se stále dokola), když sa vykoná script. kde je chyba?
//edit
VYŘEŠENO!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: