Autor | Zpráva | ||
---|---|---|---|
lukas889 Profil |
#1 · Zasláno: 4. 12. 2008, 22:32:56
Řeším jeden zapeklitý problém.
Mám web, kde se mi vypisují zprávy. A rád bych měl v hlavičce počet nových zpráv - pravidelně aktualizovaných. V hlavičce - tj. v <title>0 nových zpráv</title>. Počet si zjistím přes skript z mysql, to není podstatné. Jde o to, aby se aktualizovala jen ta hlavička, nikoli celá stránka. Jedná se mi o to, jak udělat stránku, aby se mi hlavička aktualizovala, cca. každých 30 vteřin. Aniž bych musel aktualizovat celou stránku - tj. kde budu mít třeba rozepsaný text nebo tam budu zrovna číst tu zprávu... Protože pak bych o to přišel a strana by se aktualizovala celá. ( přes <META http-equiv='refresh' content='300;url=index.php'> ) Myslel jsem, že bych to udělal přes rámy (frames), čímž docílím toho, že se aktualizuje jeden rám (zahlavi.php) a hlavný rám (vypis.php) zůstane beze změny. Jenže v hlavičce se mi vypíše title ze souboru index.php a ne z toho rámu, který se aktualizuje (zahlavi.php). Ani když do index.php nedám title, tak se pak nevypíše nic, žádný hlavička... Má to tak třeba seznam.cz :-) |
||
Arcturus Profil |
#2 · Zasláno: 4. 12. 2008, 22:37:01
Pomocí Ajaxu získáš data a Javascriptem aktualizuješ obsah titulku.
|
||
lukas889 Profil |
#3 · Zasláno: 4. 12. 2008, 23:23:51
Díky za radu, taky jsem si myslel, že na to bude ajax a javascript, jenže v tom ještě tak trochu tápu, nejsem žádnej zkušenej programátor... Nešlo by poradit jakou funkcí se javascriptem aktualizuje obsah titulku a jakou funkcí z ajaxu získat data z dtb mysql ? si to pak nastuduju už na netu ty funkce a přizpůsobím si je :)
|
||
Arcturus Profil |
#4 · Zasláno: 5. 12. 2008, 13:38:19
Na programujte.com je dobrý článek o Ajaxu:
http://programujte.com/index.php?akce=clanek&cl=2008071702-ajax-%96-4- lekce (Je to odkaz na 4. lekci, pravděpodobně si budeš muset přečíst i předchozí lekce, aby jsi to dokázal sestrojit.) a javascriptem změníš titulek: document.title = titulek; //do proměnné titulek vložíš hodnotu získanou ajaxem |
||
lukas889 Profil |
#5 · Zasláno: 5. 12. 2008, 22:15:07
Tak tápeme dál :-)
Vytvořil jsem php soubor, který by měl zjišťovat údaje - phpscript.php ----------------- phpscipt.php ------------------------ <?php $link=mysql_connect("server","jmeno","heslo") or die("Could not connect\n"); mysql_select_db("moje_dtb") or die("Could not select database"); $vystup = @mysql_num_rows(mysql_query("SELECT DISTINCT * FROM zpravy ")); ?> ---------------------------------------------------------- A pak mám hlavní dokument ---------------- index.php ---------------------------- <html><head> <script language="JavaScript" type="text/javascript"> var xhr = vytvorXHR(); function vytvorXHR(){ var xhr; try{ xhr = new XMLHttpRequest(); }catch(e){//pro případ starší verze prohlížeče var MSXmlVerze = new Array('MSXML2.XML.Http.6.0','MSXML2.XML.Http.5.0','MSXML2.XML.Http.4.0 ','MSXML2.XML.Http.3.0','MSXML2.XML.Http.2.0','Microsoft.XML.Http'); for(var i = 0; i < MSXmlVerze.lenght; i ++){ try{ xhr = new ActiveXObject(MSXmlVerze[i]); alert(MSXmlVerze[i]); }catch(e){ //vzniklou chybu ignoruji a pokračuji nastavením další verze } } } if(!xhr) alert("Došlo k chybě při vytváření objektu XMLHttpRequest!"); else return xhr; } function prectiSoubor(){ if(xhr){ try{ xhr.open("POST","phpscript.php",true); xhr.onreadystatechange = ctiOdpoved; xhr.send(null); }catch(e){ alert("Nelze se připojik k serveru:\n" + e.toString()); } }else{ alert("Funkce \"precitSoubor()\": chybí objekt XMLHttpRequest"); } } // PŘEDPOKLÁDÁM ŽE PROBLÉM BUDE NÍŽE :-) function ctiOdpoved(){ if(xhr.readyState == 4){ if(xhr.status == 200){ try{ var XMLRes = xhr.responseXML; //zachycení chyb IE a Opery if(!XMLRes || !XMLRes.documentElement){ throw("Chybná struktura XML:\n"+xhr.responseText); } //zachycení chyb ohnivé lišky :-) var rootNodeName = XMLRes.documentElement.nodeName; if(rootNodeName == "parsereerror"){ throw("Chybná struktura XML:\n"+xhr.responseText); } //čtu dokument, jelikož je vše ok :-) var vystup =""; }catch(e){ alert("Chyba při čtení odpovědi:"+e.toString()); } }else{ alert("Požadavek HTTP není v pořádku.") } } } </script> <script language="JavaScript" type="text/javascript"> document.title=vystup; </script> </head></html> ---------------------------------------------------------- Nebo jsem vedle a dělá se to úplně jinak ? :-) |
||
Arcturus Profil |
#6 · Zasláno: 5. 12. 2008, 23:12:40
Nejsem si jistý jestli to vůbec funguje (mělo by), ale je to zjednodušená úplněně neošetřená verze.
zkus to takto: zpravy.php <?php mysql_connect("server", "uzivatel", "heslo"); mysql_select_db("databaze"); $pocet = mysql_num_rows(mysql_query("SELECT novezpravy FROM zpravy")); echo "<pocet>". $pocet ."</pocet>; header("Content-type: text/xml"); ?> index.html <html> <head> <title>Vítejte</title> </head> <body> <script> dotaz = new XMLHttpRequest(); function pozadavek() { dotaz.open("POST","zpravy.php"); dotaz.onreadystatechange = cteni; dotaz.send(null); } function cteni() { if(dotaz.status == 200) { vysledek = dotaz.responseXML; xmlRoot = XMLRes.documentElement; pocet = xmlRoot.getElementsByTagName("pocet"); document.title = "Máme "+ pocet +" nových zpráv"; } } </script> </body> </head></html> Snad to rozchodíš. |
||
lukas889 Profil |
#7 · Zasláno: 6. 12. 2008, 00:11:18
Dík za snahu, ale bohužel to nechodí... Píše to pořád jen Vítejte, i když přidávám do dtb zprávy... No nic, podívám se na to zas ráno a uvidím :-) zkusím to tvým způsobem, prohledat přes net a třeba na to přijdu :) až na to přijdu, napíšu sem konečnou verzi, kdyby vás někoho něco napadlo, tak šup sem s tím :-) díky...
|
||
Jack Finger Profil |
#8 · Zasláno: 6. 12. 2008, 01:17:23 · Upravil/a: Jack Finger
lukas889
Nevím, jestli Ti to pomůže, ale šel by použít nějaký JS framework, např. jQuery nebo script.aculo.us. Já používám jQuery, jsem spokojen, Tvůj JS kód by vypadal takto: ... <script type="text/javascript"> function CheckMessages(){ $.ajax({ type: "POST", url: "zpravy.php", success: function(html){ document.title = "Máme "+ html +" nových zpráv"; } }); setTimetout("CheckMessages()", 30000); } </script> ... <body onload="CheckMessages()"> ... |
||
lukas889 Profil |
#9 · Zasláno: 6. 12. 2008, 10:12:55
JackFinger, dík za radu, ale tvůj script mi v IE háže výstražný trojúhelník, ve Firefox sice ne, ale stejně to nejde :(
|
||
Jack Finger Profil |
#10 · Zasláno: 7. 12. 2008, 00:02:19
lukas889
No, a co to hlási? |
||
lukas889 Profil |
#11 · Zasláno: 7. 12. 2008, 00:21:35
Na zobrazované stránce nastaly potíže, a je proto možné, že nebude zobrazena správně nebo nebude fungovat. Tuto zprávu můžete v budoucnu zobrazit poklepáním na ikonu upozornění ve stavovém řádku.
V podrobnostech je: Chyba 0: $ není definováno |
||
Jack Finger Profil |
#12 · Zasláno: 8. 12. 2008, 18:37:07
lukas889
No jo, jenže ty tam musíš taky nějak vložit ten framework, více na jquery.com. |
||
Časová prodleva: 15 let
|
0