Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
#1 · Zasláno: 29. 3. 2015, 19:00:31
Dobrý den,
Chtěl bych vytvořit seznam článků kde se při načtení stránky načtou všechny články. Pak pokud bude nějaký nový článek tak by se měl zobrazit a to bez nutnosti refreshe. Můj úmysl by byl že se bude pomocí ajaxu refreshovat skript který bude vracet nějaké hodnotu (bohužel zatím přesně nevím jak): setInterval(function(){ $(".main-supply").load("/plugins/ajax/supply.php"); },5000); //toto mi každých 5 vteřin načte skript kde se budou vypisovat články. A potom by se mělo pomocí skriptu přidat článek který ještě není zobrazený: $(document).ready(function(){ var textSupplyss = '<div class="post"> <div class="postheader"><div class="postleft"><img src="'+profile_img+'" /></div><div class="postright"><div class="name"><div class="padd">'+my_name+'</div></div><div class="info"><div class="padd"><span>Zveřejněno: '+datetime+'</span><span>0 komentářů</span></div></div></div></div><div class="postcontent"><div class="padd">'+$("#textSupply").val()+'</div></div></div>'; $("#results").prepend(textSupplyss); }); Předem děkuji za odpovědi. |
||
Časová prodleva: 4 dny
|
|||
juriad Profil |
#2 · Zasláno: 2. 4. 2015, 11:00:11
Předej skriptu supply.php parametr, kterým bude id posledního zobrazeného článku. Pak ten skript vrátí jen novější články. Pokud potřebuješ uvažovat i nové starší články (třeba přesunuté z jiných kategorií), musel bys poslat seznam všech id, které znáš.
|
||
Fisak Profil |
#3 · Zasláno: 2. 4. 2015, 20:44:20
juriad:
No já spíš přemýšlel jestli nejde udělat nějaká proměná v JS kam bych uložil poslední id. Pak bych to předal supply.php jak říkáte vy. Ale bohužel nevím jak se nějaká taková globální proměnná dělá v JS |
||
juriad Profil |
#4 · Zasláno: 2. 4. 2015, 21:05:19
Globální proměnnou lze samozřejmě vytvořit; dokonce minimálně třemi způsoby:
1) klíčovým slovem var a názvem proměnné někde mimo definici jakékoli funkce. 2) prostě ji začít používat kdekoli a nikde ji nedeklarovat pomocí slova var. Toto se považuje za prasečinu. 3) jako atribut objektu windows; toto je dost podobné druhému způsobu. Živá ukázka Jak vidíš, můžeš k té proměnné přistoupit odkudkoli. Otázkou je pak, jak ji naplníš a jak ji budeš udržovat aktuální. |
||
Fisak Profil |
#5 · Zasláno: 2. 4. 2015, 21:11:43
juriad:
Nakonec jsem to udělal trochu amatérsky $_SESSION['actuall_supply'] ... vím že to asi nebude optimální řešení ale chtěl bych to teďkon pořešit aby to alespoň fungovalo. setInterval(function(){ $("#results").load("/plugins/ajax/supply-add.php"); },5000); $ $supply_sql_friends = DB::query("select [uss_id_1], [uss_id_2] from [:pref:friends] where [uss_id_1] = %i", $_SESSION['uss_id'], " and [approved] = %s", "yes", " or [uss_id_2] = %i", $_SESSION['uss_id'], " and [approved] = %s", "yes"); $array_F = array( 'uss_id%in'=>$supply_sql_friends ); $supply_sql = DB::query("select * from [:pref:supply] where [uss_id] = %i", $_SESSION['uss_id'], " and [id] > %i", $_SESSION['actual_supply'], " or %and", $array_F, " and [id] > %i", $_SESSION['actual_supply'], " ORDER by [id] DESC"); foreach ($supply_sql as $n => $data_supply) { $supply_sql_uss = DB::query("select [name], [last_name], [profile_img] from [:pref:users] where [id] = %i", $data_supply->uss_id, " %lmt ", "1"); foreach ($supply_sql_uss as $n => $data_supply_uss) { echo ' $(document).ready(function(){ var textSupplyss = \'<div class="post"> <div class="postheader"><div class="postleft"><img src="'.$data_supply_uss->profile_img.'" /></div><div class="postright"><div class="name"><div class="padd">'.$data_supply_uss->name.' '.$data_supply_uss->last_name.'</div></div><div class="info"><div class="padd"><span>Zveřejněno: '.$data_supply->date.'</span><span>0 komentářů</span></div></div></div></div><div class="postcontent"><div class="padd">'.$data_supply->text.'</div></div></div>\'; $("#results").prepend(textSupplyss); });'; $_SESSION['actual_supply'] = $data_supply->id; } setInterval(function(){ $("#results").load("/plugins/ajax/supply-add.php"); },5000); |
||
juriad Profil |
#6 · Zasláno: 2. 4. 2015, 21:15:53
Chceš použít jQuery.get a vložit si připadná nová data do toho #results sám pomocí append/prepend.
Mimochodem, to myslíš váženě, že uživatel (nebo robot) bez JS neuvidí na stránce vůbec nic? |
||
juriad Profil |
#7 · Zasláno: 2. 4. 2015, 21:18:03
Problém s SESSION je ten, že uživatel nemůže mít zobrazené dvě stránky zároveň. Začnou se ovlivňovat a do té starší začne natahovat články patřící do té novější (kam se také budou přidavat).
|
||
Fisak Profil |
#8 · Zasláno: 2. 4. 2015, 21:20:01 · Upravil/a: Fisak
juriad:
Ano přesně tak... A dal jsem tedy místo .load -> .get a bohužel nefunguje to :( setInterval(function(){ $("#results").get("/plugins/ajax/supply-add.php"); },5000); juriad: „dvě stránky zároveň“ Bude tam jen jeden výpis s článkama takže by to neměl být problém Přednější je teď pro mě zobrazení tech článků tak jak se to zobrazovat má. Poté začnu ještě řešit session... setInterval(function(){ $.get( "/plugins/ajax/supply-add.php", function( data ) { $( "#results" ).html( data );}); },5000); takto to funguje ale bohužel se stejným výsledkem... vymaže to všechny články. A pokud nějaký přidám tak se zobrazí na 5s a pak zase zmizí. |
||
juriad Profil |
Musíš mít callback, který je nové články přidá; něco jako:
$.get("/plugins/ajax/supply-add.php", function(data) { $("#results").prepend(data); }); |
||
Časová prodleva: 9 let
|
0