ugrás a tartalomhoz

Iframe 1 másodpercenkénti újratöltése Ajax-szal

mwt · 2007. Nov. 25. (V), 11.48
Sziasztok!

Kb 2 órája falom a netet de egyszerűen nem találok olyan anyagot amin eltudnék indulni. Az lenne a kérdésem, hogy valaki nem tud-e egy olyan scriptet, hogy adott egy frame :

<iframe src="jatekosok.php?ip=000.000.000.000&port=00000" frameborder="0"></iframe>

és itt azt szeretném megoldani, hogy ez a frame frissüljön 1mpként, de úgy, hogy ne látszódjon az. Erre úgy hallottam, hogy van az ajax. Ez nekem megy is, csak annyi a gondom, hogy nem tudom megoldani azt, hogy ne gomb nyomásra frissüljön, hanem dinamikusan 1MP-ként.

Egy megoldást már találram rá, de azt nem tudtam megoldani, hogy 1MPként frissüljön reload nélkül. A setTimeOut(); al próbálkoztam de nem jött össze :S

A lecke itt található : http://www.tutorial.hu/node/1041

Kérem aki tud segítsen nagyon sürgős lenne, köszönöm!

Üdv, Bence.
 
1

nos

cSuwwi · 2007. Nov. 25. (V), 13.11
1 másodperc túl kevés lesz, ha jobban le van terhelve a szerver, ennyi idő alatt ki sem tud szolgálni (meg függ a feldolgozandó fájltól is, mennyi feladat van benne)

egyáltalán minek iframe? ha csak az oldal egy részét akarod frissíteni, ajaxal azt is lehet. beraksz egy divet az iframe helyére, és ajaxal oda töltöd be feldolgozandó script tartalmát.

settimeout lesz a megoldás kulcsa, ha megnézed a tutorialhu-n se iframeznek, hanem divbe tölti vissza, tanulmányozd a kódot, a google-el is bőven találsz ajax tutorialokat
2

Hogy mire kéne?

mwt · 2007. Nov. 25. (V), 13.51
Szia,

Pontosan ez egy szerver figyelő script és van egy rész, amivel az online usereket nézem. ( Ez egy Multiplayer játék szerver figyelő a Jedi Academy-hez )

Itt egy kép :
http://mapdesignupload.extra.hu/img/upload/f5891be64561918a3955f00c560efbdf.png

A kép szerint önmagáról beszél, hogy miért szeretném frissíteni 1 MP ként :) Ez Online vagyis Élő statisztika a szerverekről.

És ez a játékos lista , amit szeretnék frissítgetni újratöltés nélkül.
3

A kép alapján

csla · 2007. Nov. 25. (V), 14.09
Pont mivel csak perc nagyságrendben írod ki az adatot, azért nem szükséges másodpercenként frissíteni, nem?
4

hehe

cSuwwi · 2007. Nov. 25. (V), 14.18
a kép alapján én is erre gondoltam először
betöltéskor frissítés, majd percenként/ jó félpercenként ráfrissíteni bőven elég szerintem is
5

Link

mwt · 2007. Nov. 25. (V), 14.59
Tessék itt egy link : http://web1.dynamicweb.hu/mwt/accounts/tso/
6

Mit szeretnék pontosan...

mwt · 2007. Nov. 25. (V), 15.01
Igen akkor ez a fél perces is megfelelne. Ez rendben de én stílusosan szeretném megoldani. Ezt úgy értem, hogy AJAX-al újratöltés nélkül.

Tehát újratölti csak ne láccon. Meg IE ben kattog :S Szal ezért választanám inkább az AJAX-ot . És azt nem tudtam megoldani ,hogy dinamikusan töltölődjön újra és ne gomb nyomásra.

A scriptem megvan rád de az DIV-es megoldás ami szintén nem jó. Így nézne ki :
<a href='oldalketto.html' class="loadinto-contentwrapper">ÚJRATÖLTÉS</a>
<div id="contentwrapper">
index tartalom ...
</div>
Nos ez JÓ , csak az a bibi, hogy dinamikusan nem tudom újratölteni. :S Erre kéne az a kód ami dinamikusan tölti újra mondjuk fél percenként.
7

Eddig oké...

csla · 2007. Nov. 25. (V), 15.09
Tovább akkor kettő dolog:

1. Írod, hogy próbálkoztál a setTimeout függvénnyel. Esetleg mutasd meg, hogy hol akadtál el vele, és akkor azzal megyünk tovább.

2. Ha mondjuk a prototype.js-t használnád, abban létezik egy Ajax.PeriodicalUpdater, ami egyszerűen pont azt tudja, amit szeretnél.

Ez utóbbihoz találtam is egy rövid példát, szerintem ez alapján simán meg kell, hogy tudd csinálni: http://groups.google.com/group/Prototypejs/web/ajax-periodicalupdater-example
8

2.

mwt · 2007. Nov. 25. (V), 15.16
Maradok a 2-őnél mert a setTimeOut(); nem lett vmi jó megoldás :S

Majd 5-6 óra fele leszek.
17

Linkelt példa

csla · 2007. Nov. 27. (K), 11.36
Nem nézegetted meg/próbáltad ki ezt a linkelt példát?
9

setTimeOut();

mwt · 2007. Nov. 25. (V), 17.21
Én ott akadtam el, hogy nem tudom, hogy lehet behívni a framet tehát :
<script>
setTimeOut(location.href = "akarmi.html", 500);
</script>

<iframe name="asd">
És itt, hogy lehet megcsálni, hogy ne maga a lap, hanem csak az asd nevű frame töltölődjön újra?
10

így

cSuwwi · 2007. Nov. 25. (V), 21.29
frames['asd'].location.href
ha nem megy, a frames elé írhatsz document. vagy top.-ot is

de a settimeout csak egyszer fog lefutni, a végén lévő szám a másodperc ezred része (vagyis 1 másodperc 1000), 30000 kellene a félperchez, illetve settimeout helyett setInterval-al próbáld (ez folyton ismétlődik)
11

Szerintem bontsd szét a problémákat!

s_volenszki · 2007. Nov. 25. (V), 21.50
Szia!

Szerintem bontsd szét a problémákat és lépésről lépésre elemzed!

1. Mi az az AJAX, mi a célja és hogyan működik.
2. Mi az a setTimeout és hogyan működik.
3. Hogyan érünk el egy objektumot a html dokumentumban.

1.
A teljesség igénye nélkül az AJAX (Asszinkrónus Java Script és Xml) semmi más, csak egy olyan JavaScript függvények összessége, amely az XMLHttpRequest objektum segítségével kérést intéz a szerverhez a kliens böngészőjéből, anélkül, hogy annak tartalma újratöltődne. Az AJAX egy technológia, nem egy programozási nyelv!

Normál esetben a kliens szerver modell valami ilyesmi Kliens szerver

Ha frame-et használsz, annyiban jobb a helyzet, hogy a teljes oldalnak nem kell újratöltődnie, elég csak annak a keretnek, ami szállítja a tartalmat. Kliens szerver + frame

Ha viszont JavaScript-el teszed mindezt, használatba véve az XMLHttpRequest objektumot, akkor valahogy így nézünk ki: Kliens szerver + AJAX

Na már most, ha ezzel megvagyunk, akkor már azt tudjuk, hogyan megy a kérés a szerverre és hogyan érkezik az adat!

2.-3.
Ha megvannak az adatok, frissíteni kell a z oldalunk tartalmát! Egy idézet tőlem:
Egy gondolat:

Az emberek kapnak nevet, és kapnak azonosítót (személyi számot). Képzeld el hogy összegyűlik 100 ember, akik közül biztos van több János és István. Ha elkiáltod magad: „Istvánok cseréljetek pólót fehérről feketére!” valószínűleg néhányan elkezdik a cserét, a többiek meg gondolják ha már más lecserélte ők minek strapálják magukat!

De ha azt mondod 111111111, 2222222, 12522333, 2353532 személyi számú Istvánok cseréljetek pólót feketéről fehérre, az simán menni fog! Igaz?

Képzeld, a HTML dokumentumban minden objektum (kép, keret szöveg stb.) ugyan így megszólítható! Adsz neki egy egyedi azonosítót, és onnantól kezdve minden attribútumát eléred!

Változtathatod a színét, a hivatkozását, a méretét, a helyzetét, a tartalmát stb. Minden attribútumát eléred!


A próbálkozásod a frame frissítésére nem volt rossz, de előtte adj egy egyedi azonosítót a kretnek pl.: id="keret". Készíts a frissítésre egy függvényt és azt hívd meg setTimeout-tal pl.: (jó különben a név alapján történő elérés is)

function FrameReload(){
   document.getElementById('keret').src = 'a cim amit újra kell tölteni'; //Keret újratölt
   clearTimeout(Reload); //Idözítő nulláz
   Reload = setTimeout('FrameReload()',30000); //És indul újra
}
Reload = setTimeout('FrameReload()',30000); //Indul az időzítés
Ha viszont AJAX-al csinálod, javaslom, ne hozd a teljes design tartalmat, csak azt az egy két változót, amire szükséged van! Jöhet mondjuk egy kész táblázatban és egy div-be aminek pl. id="tartalom" az azonosítója beleteszed:

document.getElementById('tartalom').innerHTML = 'előre elkészítet táblázat tartalommal, vagy akár az egész oldal';
Ha külön-külön érted mi történik, pofon egyszerű lesz az egész! Remélem segítettem! :)

s_volenszki
12

Problémákra bontást..

mwt · 2007. Nov. 26. (H), 17.00
Üdv,

Az első problémám ugyanis az lenne, hogy nem tudom megoldani azt, hogy egy X frame frissüljön újratöltés nélkül. Most itt egy példa link :
http://mjc.dy.hu/tso/index.php ( Itt nincs újratöltés )

A frame autómatikusan méretezi magát az adott tartalomhoz. Ezt egy script segítségével sikerült elérnem ami a következő :
<script language=javascript>
moz=document.getElementById&&!document.all
mozHeightOffset=1
function resize_iframe_a4616a6cd01d80e6da094004a74b7e81(){
document.getElementById("sizeframe_a4616a6cd01d80e6da094004a74b7e81").height=100
document.getElementById("sizeframe_a4616a6cd01d80e6da094004a74b7e81").height=window.frames["sizeframe_a4616a6cd01d80e6da094004a74b7e81"].document.body.scrollHeight+(moz?mozHeightOffset:0)
}
</script>

<iframe id="sizeframe_a4616a6cd01d80e6da094004a74b7e81" name="sizeframe_a4616a6cd01d80e6da094004a74b7e81" src="684b905860da50bc5610c335ee2ff137.php?ip=87.229.7.53&port=29040" width="300" height="0" scrolling="no" frameborder="no" onload="resize_iframe_a4616a6cd01d80e6da094004a74b7e81()"></iframe>
Itt lehet látni az MD5 kódolást. Ezt azért alkalmaztam, hogy ha több szervert kell berakni, akkor ne legyen script ütközés. Ez a script egy 9 véletlen szerű számot sorsol és a szerver IP és port címét egyben. Tehát kb ez így néz ki : [123456789][192.168.1.100][21000]( Persze kapcsos zárójelek nélkül. )

Van egy olyan megoldás is, amit ha a frame tartalmán belül teszek, akkor 5 MP útán újratölti. Ami így nézne ki :
http://mjc.dy.hu/test/684b905860da50bc5610c335ee2ff137.php?ip=87.229.7.53&port=29040
( Ez egy teszt szerver, amin általában vannak játékosok )

Itt meg frame-val együtt :
http://mjc.dy.hu/test/index.php

Kód :
echo "<meta http-equiv=\"refresh\" content=\"5;url=684b905860da50bc5610c335ee2ff137.php?ip=".$get_ip."&port=".$get_port."\">";
Nah igen, ez eddig egy jó megoldás, de én azt szeretném megoldani, hogy ugyan úgy 5 MP-ként frissüljön, csak úgy, hogy ne látszódjon az újratöltés. Nos itt lép kébe az AJAX :) (: Remélem eddig lehetett követni :)

Erre szeretnék tippet kérni, hogy milyen script-et lehet erre használni, hogy FRAME dinamikus frissítése újratöltés nélkül X MP után.

--
Válasz a hozzászóláshoz :
--
Igen ez így jó is! Egy kérdésem lenne még. Ügye van a <A HREF=""></A>-hez, hogy CLASS- azaz osztály. Az újratöltést osztályhoz, vagyis CLASS-hoz szeretném programozni és így menne a frissítés újratöltés nélkül.

Nos létezik ez a : htmlhttprequest, ezzel meglehet azt oldani, hogy X frame frissítése dinamikusan újratöltés nélkül? ( Részben az egész kérdésem ebből áll :) )
--

Köszönöm a segítséget előre is!

Üdv, Bence.
13

Majdnem jó!! :)

mwt · 2007. Nov. 26. (H), 18.05
Íme a kód :
<script>
   function FrameReload(){  
       document.getElementById('contentwrapper').innerHTML = '<iframe src="684b905860da50bc5610c335ee2ff137.php?ip=87.229.7.53&port=29040" width="300" height="100" scrolling="no" frameborder="no"></iframe>'; //Keret újratölt  
       clearTimeout(Reload); //Idözítő nulláz  
       Reload = setTimeout('FrameReload()',4000); //És indul újra  
    }  
    Reload = setTimeout('FrameReload()',4000); //Indul az időzítés  
</script>


<div id="contentwrapper">
<iframe src="684b905860da50bc5610c335ee2ff137.php?ip=87.229.7.53&port=29040" width="300" height="100" scrolling="no" frameborder="no"></iframe>
</div>
Ez szerintem már majd nem jó, de ez még mindig úgy frissül, hogy látszólag újratöltölődik :S Szal tanácstalan vagyok.

elméletileg sztemjó:)

üdv, bence.
14

Figyelj csak!

s_volenszki · 2007. Nov. 26. (H), 22.10
Szia!

Az iframe-ed nem fog újratöltődés nélkül frissülni! Ha megnézted a képeket amiket belinkeltem, ott láthatod, hogy a html-be ágyazott iframe, majdnem olyan, mintha lenne egy újabb "böngésző" ablakod a dokumentumon belül! Ezért, annak a tartalma kizárólag úgy tud frissülni, hogy újra töltődik!

Én tökéletesen értem a problémádat és látom a megoldást is, de úgy érzem, hogy hiányos a tudásod!
Elemezzük egy kicsit a helyzetet (csak felületesen):

Ha AJAX segítségével készítesz egy alkalmazást, az a következő módon működik:

Kliens oldalon JavaScript-tel, létrehozol egy új XMLHttp kérést, amely kérés célja a szervereden egy fájl. Tételezzük fel, hogy a cél a teszt.php. Ha a teszt.php tartalma a következő:

<?php
   echo "Hali";
?>
akkor az XMLHttp kérés, a fáj megnyitása után (ha minden rendben ment) visszatér a kimenetével. FONTOS!!! A kimenetével! Tehát azzal a tartalommal, amivel megjelenne a böngésző ablakában, ha nem XMLHttp kérés miatt futna le!

Én a következőt tenném!

Az egész fájlt, ami neked ezt a kiértékelést végzi, átalakítanám úgy, hogy ne a bőngészőbe tolja a kimenetet, hanem egy változóba. Ezek után ha meghivnám AJAX-szal, változót ki echo-ztatnám a végén, így megérkezne a hőn áhított tartalom kliensre. Itt meg egy előre elkészített üres div-hez innerHTML-el hozzáfűzheted, vagy annak aktuális tartalmát felcserélheted.

Csak hogy értsd! Ez a kód egy táblázat kódja php print-tel escape-elve:

<?php
   print "<table border=\"1\"><tr><td>táblácska</td></tr></table>";
?>
Ha ezt a php kódot lefutatod, kapsz egy táblázatot! De ha a print helyett egyenlővé teszed egy $tabla változóval, és elkezded összefűzögetni a teljes tartalmat:

<?php
   $tabla .= "<table border=\"1\"><tr><td>táblácska</td></tr></table>";
   $tabla .= "<table border=\"1\"><tr><td>táblácska</td></tr></table>";
   $tabla .= "<table border=\"1\"><tr><td>táblácska</td></tr></table>";
   $tabla .= "<table border=\"1\"><tr><td>táblácska</td></tr></table>";
?>
Majd a végén

<?php
   echo $tabla;
?>
akkor megjelenik az összefűzött tartalom a bongésződben! Na ha ezt a fájlt hivod AJAX-szal, akkor az XMLHttp kérés visszatérő értéke ez lesz! Aztán már csak bele kell passzintani egy div-be és megkaptad a php tartalmát AJAX-szal!

Szóval írd át a kiértékelő fájlodat, hogy a kimenete kerüljön be egy változóba, aztán hajrá, de én azt javaslom, készíts magadnak egy minta alkalmazást, amivel megérted, hogy ez hogyan működik! Elég, ha az általam említett példát megépíted az echo "Hali";-val!

s_volenszki
15

nem értem minek összefűzni

Szekeres Gergő · 2007. Nov. 26. (H), 23.03
bocsi, hogy beleszólok, de minek egy sorba összefűzni a változókat? az oké, hogy egy js stringben nem elhet \n, de itt a http (vagy aminek hívod) objetum response textjét kell visszaírni, amiben viszont simán lehet sortörés.

ajaxot amúgy úgy kell elképzelni, mint egy böngészőt a böngésződbe: "megnyit" a js egy weboldalt, de amit te ott látnál, ő azzal az értékkel visszatér. Aztán, hogy utána mi lesz a sorsa az adatnak, az már csak rajtad múlik, általánban egy innerHTML-ben végzi.. :)
16

...jogos...

s_volenszki · 2007. Nov. 27. (K), 08.35
Jogos, tökéletesen igazad van, hiszen a kimenet számít!

A változóba fűzéssel érzékeltetni akartam, hogy az AJAX kérés visszatérő értéke olyan, mintha egy változó értékével térne vissza (gondoltam, kicsit jobban emészthető, mint a böngészőben a böngésző, aminek a tartalma az amit látnál, de nem látsz :) )! Aztán a végén, az innerHTML-el még DOCTYPE-ot, komplett JavaScript és CSS implementációkat is hozzáad a div-hez.

s_volenszki
18

Siker.

mwt · 2007. Nov. 27. (K), 17.04
Hali,

Sikerült megoldani a problémát és megfelelően működik a script :)

Üdv, Bence.
19

Igazán örülök!

s_volenszki · 2007. Nov. 27. (K), 19.39
Taps!

s_volenszki
20

Itt az eredmény >>>

mwt · 2007. Nov. 28. (Sze), 20.10
http://mjc.dy.hu/servers.php
21

Commercial advertisers often

Rosh · 2010. Aug. 18. (Sze), 20.28
Commercial advertisers often seek to tv shopping generate increased consumption of their products or services through branding, which involves the repetition of an image or product name in an effort to associate related qualities jewelry stores with the brand in the minds of consumers. Different types of media can be used to deliver these messages, including traditional media such as newspapers, magazines, electronic greeting cards television, radio, outdoor or direct mail; or new media such as websites and text messages. Advertising may be placed by an advertising agency on behalf cheap web hosting of a company or other organization.