Autor | Zpráva | ||
---|---|---|---|
TomasJ Profil |
Zdravím. Mám problém s načítáním obsahu přes AJAX, když načítám obsah z nekonečných cyklů. Příklad:
Mám PHP skript, kde je nekonečný cyklus. V cyklu vypíšu nějaký text, uspím na půl sekundy skript, a pokračuji dále... Pak mám JS, kterým otevřu PHP skript s nekonečným cyklem a do onReadyStateChange dám výpis obsahu do elementu <div>. Pokouším se o to, aby mi AJAX vypisoval vše co se v PHP skriptu vypíše. Jen toho nějak nemohu docílit u prohlížečů Opera a Chrome. Ve Firefoxu to funguje jak má. V IE to funguje v případě, že vedu vše ještě přes <iframe>. Tj. AJAX otevře stránku, kde je iframe a iframe má SRC na PHP skript. Pak ukázka částečné (ale nedostatečně) funguje i v Opeře, ale Chrome nic. Ukázky: Holý PHP skript PHP skript načtený v iframe AJAX bez iframe AJAX s iframe Děkuji všem za rady. Pokud máte otevřenou některou z ukázek, a otevřete si další (tu samou nebo jinou), může se stát, že se vám v tom okně nebude nic psát, dokud nezavřete ostatní ukázky. |
||
_es Profil |
#2 · Zasláno: 28. 3. 2013, 07:16:02
TomasJ:
Asi je nekompatibilita prehliadačov ohľadom vyvolania udalosti onReadyStateChange či prístupu k neúplne načítanému obsahu - vlastnosti responseText . Pri práci s objektom XMLHttpRequest sa obvykle predpokladá, že sa pracuje až s úplne načítanými dátami, pri inom používaní nie je isté správanie sa v rôznych prehliadačoch.
Ak by to aj fungovalo vo všetkých prehliadačoch, tak to je chybný návrh z pohľadu dlhšej doby behu skriptu. V JS by sa pracovalo so stále dlhším textovým reťazcom a aj do toho HTML elementu by bol zapisovaný stále dlhší a dlhší text. |
||
TomasJ Profil |
#3 · Zasláno: 28. 3. 2013, 11:00:56
A měl bys nějakýjiný návrh, jak udělat online chat, s jedním vyvoláním PHP skriptu (aby vše běželo pouze na jednom portu) s protokolem UDP?
|
||
TomasJ Profil |
#4 · Zasláno: 29. 3. 2013, 22:09:27
Tak jsem hledal, zatím mě napadl jen Flash. Jen ho neumím a v případě, že bych se chtěl začít učit Flash, tak na to ani nemám čas (za měsíc a něco zápočty a zkoušky). Když by se čas našel, absolutně nevím kde začít. Tak se ptám: Dá se toto vyřešit nějak elegantně i bez Flashe?
|
||
Časová prodleva: 3 dny
|
|||
_es Profil |
#5 · Zasláno: 2. 4. 2013, 10:49:33
TomasJ:
V niektorých prehliadačoch môže fungovať: www.zdrojak.cz/clanky/web-sockets „s protokolem UDP“ Čo s tým má UDP? |
||
Časová prodleva: 3 dny
|
|||
TomasJ Profil |
_es:
No: Online chat na protokolu UDP. Musí to běžet s protokolem UDP, protože máme herní server, který má komunikaci s webem právě přes tento protokol. PHP skript obsahuje UDP klienta, který píše příchozí data přímo, v reálném čase. V podstatě mi vše funguje správně, jen se chci zbavit nekonečného načítání stránky. WebSockets vypadá velmi zajímavě, a řešilo by to i můj problém. Ale jak správně píšeš, v některých přohlížečích to fungovat může a v některých to prostě nefunguje. Já chci, aby chat fungoval správně od IE 7 (i když web mám optimalizovaný i pri IE 6). |
||
Časová prodleva: 4 dny
|
|||
Witiko Profil |
#7 · Zasláno: 9. 4. 2013, 02:17:32
TomasJ:
Pokud to správně chápu, tak se snažíš o long polling? |
||
TomasJ Profil |
Witiko:
Ano, přesně tak. Jen jsem nevěděl jak to nazvat. Mohl bys mi prosím ukázat nějakou ukázku / příklad, kde to je použité? Na zkoušku jsem vytvořil účet Tester s heslem djpw. Můžete se kouknout na http://samp.k3s4.sk, kde se přihlásíte. Pak pokračujte s tom spodním menu na položku Server Chat a uvidíte, jak se to neustále načítá. Na chatu lze být pouze 1x z tohoto účtu, takže se prosím nezlobte, když se vám ukáže tento text. Ono mně osobně to nevadí, ale pár lidí je pak zmateno, že se jim nechce stránka načíst. |
||
Witiko Profil |
TomasJ:
Long polling používá například facebook chat. Trik je v tom, že data tahaná pomocí XHR se pošlou s HTTP hlavičkou Content-type: multipart/x-mixed-replace , přičemž prohlížeč díky této hlavičce spojení neukončí a stále čeká na nová data, která se odchytávají pomocí onReadyStateChange . Má to výhodu, že na rozdíl od normální HTTP žádosti tato nemá timeout a prohlížeč se netváří, jako by pořád něco stahoval. Pro zpětnou kompatibilitu s prohlížeči, které hlavičku nerozeznávají, se pak XHR obvykle abort uje při každých nových datech od serveru a vytváří se nové.
|
||
TomasJ Profil |
Witiko:
„se pak XHR obvykle abortuje při každých nových datech od serveru a vytváří se nové“ Tak to je zase špatné. Nemohu dopustit aby se vytvořilo nové spojení. Nové spojení odmítám, dokud je v platnosti to staré. Staré platí dokud se posílá oživovací packet. Pokud se do 10 sekund nepošle, spojení je označené za prošlé. Ale děkuji i tak. Napadlo mě pro IE udělat alternativu - nechat iframe. Na wikipedii píší, že v ostatních to šlape. |
||
Časová prodleva: 11 let
|
0