Autor | Zpráva | ||
---|---|---|---|
jakre Profil |
#1 · Zasláno: 12. 12. 2014, 15:05:34
Hezké odpoledne,
obracím se na zkušené JS vývojáře s dotazem, jak udělat automaticky se obnovující výpis na webu z tagu <script src="..." type="text/javascript"></script> .
Konkrétně bych potřeboval, aby se na mém webu aktualizoval zdroj informací (z uvedeného odkazu v src) například každých 5 minut. V kódu popsaném výše mám jako src vstup URL adresu souboru, ve kterém se nachází kód, příkladem je: document.write('měnící se text'); document.write('další text...'); . A právě "měnící se text"
a "další text..." jsou v mém případě texty, které jsou v souboru odkazovaném ze src náhodně měněny. Řešení si představuji tak, že pokud budu na svém webu, každých 5 minut se obnoví ten jeden konkrétní kód a na webu s mi tedy zobrazí nový výstup z document.write('nový text'); . Nehledám řešení jako jsou automatické
obnovení celé stránky, ruční obnovování kliknutím a podobně. Byl bych velmi rád, pokud by se mezi vámi, programátory a vývojáři, našel někdo, kdo můj požadavek dokázal splnit. Předem vám děkuji :-) |
||
Str4wberry Profil |
#2 · Zasláno: 12. 12. 2014, 15:19:36
Problém u
document.write je v tom, že nefunguje po načtení stránky, je potřeba použít innerHTML .
Jinak stačí každých pět minut časovačem připojíte JS soubor, který výpis zajistí. Mimochodem, co je cílem udělat? |
||
jakre Profil |
Str4wberry:
Cílem je, aby se z jednoho webu čerpal RSS zdroj (nadpis a popisek) a vypsal se na druhém webu, kde se na stránce každých pět minut aktualizuje výstup ze src: <script src="..." type="text/javascript"></script> .
|
||
jakre Profil |
#4 · Zasláno: 13. 12. 2014, 21:31:08
Neumíte někdo prosím udělat JS (nebo PHP) kód, který by z RSS vytáhl jeden artikl (jeden nadpis a popisek). Potřeboval bych, aby maximální délka nadpisu byla 70 znaků (pokud je delší, zobrazí se navíc "...") a aby byla délka popisku (description) nastavená na maximálně 110 znaků (poté tři tečky).
Zdrojem tohoto kódu by tedy byl první (nejnovější) artikl obsahující nadpis (max. 70 znaků) a popisek (max. 110 znaků). A to nejlépe v: <div class="nadpis">Text nadpis</div><div class="popisek">Text popisku</div> .
Díky |
||
Str4wberry Profil |
#5 · Zasláno: 13. 12. 2014, 22:54:55
Umíme.
Pokud chcete hotové řešení, tak na to tu je kategorie Práce a zakázky. Jinak se ptejte s čím máte konkrétně problém. |
||
jakre Profil |
Děkuji. Problém mám konkrétně s kódem, který aktualizuje data. Na webu mám nahraný kód:
<script src="http://code.jquery.com/jquery-latest.js"></script> <script> jQuery().ready(function (){ setInterval("getResult()",5000); }); function getResult(){ jQuery.post("zdroj.php",function( data ) { jQuery("#vypis").html(data); }); } </script> <div id="vypis">loading...</div> Při spuštění stránky (nebo aktualizaci - F5) se zobrazuje text loading... po dobu času uvedeném ve scriptu setInterval("getResult()",5000); - a to je problém.
Potřebuji, aby ihned po načtení návštěvník dostal data ze souboru zdroj.php, která se poté budou každých 5000ms aktualizovat. |
||
_es Profil |
#7 · Zasláno: 13. 12. 2014, 23:25:41
jakre:
A čo tak: jQuery().ready(function (){ getResult(); setInterval(getResult,5000); }); |
||
jakre Profil |
_es:
Děkuji. Podle vašeho kódu to funguje, jak má. Str4wberry: Zkusím si poradit sám, popřípadě napíši do té kategorie. |
||
_es Profil |
#9 · Zasláno: 13. 12. 2014, 23:36:46
jakre:
Ale, keďže ide o stav tesne po načítaní stránky, lepšie je zrýchliť odozvu o jeden sieťový dotaz a načítať výstup zo zdroj.php do <div id="vypis"> už pri spracovaní stránky v PHP - ak je aj kód v [#6] spracovávaný v PHP.
|
||
Str4wberry Profil |
#10 · Zasláno: 13. 12. 2014, 23:52:51
Možná bych spíš použil
setTimeout , který by se volal vždy až při získání dat. Takhle může při zdržení dojít k předběhnutí požadavků, kdy se později zavolaný požadavek vykoná dříve než ten první.
Reakce na _es: Je otázka, jestli se tím odezva spíš nezpomalí. Pokud ten zdroj.php stahuje nějaký obsah z RSS cizí stránky, mohlo by to nějakou znatelnou dobu trvat. Asynchronní načtení JavaScriptem sice vytvoří další požadavek, ale nezasekne načítání stránky. To může být s ohledem na významnost obsahu samotné stránky a (ne)významnost RSS výhodné.
|
||
jakre Profil |
#11 · Zasláno: 13. 12. 2014, 23:59:18
Str4wberry:
Můžete mi prosím poslat kód, ve kterém bude zmíněný setTimeout integrovaný? Děkuji
Zatím jsem udělal příklad na svém webu. |
||
_es Profil |
|||
jakre Profil |
_es:
To znamená, že mám odstranit jednu funkci? Nějak takhle: <script src="http://code.jquery.com/jquery-latest.js"></script> <script> function getResult(){ jQuery.post("zdroj.php",function( data ) { jQuery("#vypis").html(data); setTimeout(getResult,5000); }); } </script> <div id="vypis">loading...</div> _es, myslíte, že je to lepší řešení a je to tak správně? |
||
_es Profil |
#14 · Zasláno: 14. 12. 2014, 01:20:33
[#13] jakre:
No ale funkciu getResult musíš potom aj niekedy zavolať, aby to šlo. Napríklad, namiesto pôvodného zavolania, môžeš použiť:
<div id="vypis">loading...</div><script>getResult()</script> |
||
jakre Profil |
_es:
Nevyjde to nastejno? Jestli mám dvě funkce nebo si jí volám... A já mám na webu taky script (function datum() { var date = new Date(), weekday = [ 'Ned\u011Ble', 'Pond\u011Bl\xED', '\xDAter\xFD', 'St\u0159eda', '\u010Ctvrtek', 'P\xE1tek', 'Sobota' ]; document.getElementById('weekday').innerHTML = weekday[date.getDay()]; document.getElementById('day').innerHTML = date.getDate(); var t = setTimeout(function(){datum()},1000) }()) Nešlo by to nějak sloučit do jednoho <script></script> ?
|
||
_es Profil |
|||
jakre Profil |
#17 · Zasláno: 14. 12. 2014, 01:32:21
_es:
Reaguji na [#14], jestli není zbytečné to předělat a funkci zvlášť zavolat nebo jestli je to lepší, než mít dvě funkce jQuery().ready(function (){ getResult(); setInterval(getResult,5000); }); function getResult(){ jQuery.post("novinky.php",function( data ) { jQuery("#novinky").html(data); }); } <script></script> .
Protože mi funkce „(function datum()“ začíná ( závorkou a to je špatně... |
||
_es Profil |
jakre:
„Protože mi funkce ‚(function datum()‘ začíná ( závorkou a to je špatně...“ Záleží na tom, čo považuješ za zlé, funkcia je pod jej názvom dostupná len vo vnútri tých zátvoriek a tie zátvorky zároveň umožňujú ju hneď zavolať. |
||
jakre Profil |
#19 · Zasláno: 14. 12. 2014, 01:38:34
Myslím tím funkci, která začíná závorkou. Protože většinou funkce začínají bez ní nebo
$ dolarem.
A potom končí }()) , namísto běžné { .
|
||
_es Profil |
jakre:
„Myslím tím funkci, která začíná závorkou.“ Tá funkcia nezačína zátvorkou ale príkazom function . Zátvorky slúžia na to, že to nie je považované za definíciu funkcie, ale za výraz s významom „anonymná funkcia“ a jej názov datum slúži na to, aby sa na ňu dalo odkazovať v jej vnútri. Mimo zátvoriek { a } je nedostupná pod jej názvom, tesne za } je ešte dostupná na to, aby šla zavolať - operátor () . Inde už dostupná nie je.
„Protože většinou funkce začínají bez ní nebo $ dolarem.“ $ je len obyčajný názov globálnej funkcie, rovnako ako názov tvojej funkcie getResult : Časté potíže, zajímavosti a poučné debaty » Co vlastně je jQuery?
|
||
jakre Profil |
_es:
„Inde už dostupná nie je.“ Děkuji za odpověď. Mě zajímá, jestli když funkce spojím do jedné a zavolám se pomocí src="" , tak jestli bude ta se závorkou funkční.
V nějakém případě (už si nepamatuji), mi funkce datum nefungovala. Bude tedy stačit, když script níže uložím jako soubor .js a zavolám externě? Nenastanou pak problémy s funkcí datum (jako se mi to už jednou stalo)? (function datum() { var date = new Date(), weekday = [ 'Ned\u011Ble', 'Pond\u011Bl\xED', '\xDAter\xFD', 'St\u0159eda', '\u010Ctvrtek', 'P\xE1tek', 'Sobota' ]; document.getElementById('weekday').innerHTML = weekday[date.getDay()]; document.getElementById('day').innerHTML = date.getDate(); var t = setTimeout(function(){datum()},1000) }()) jQuery().ready(function (){ getResult(); setInterval(getResult,5000); }); function getResult(){ jQuery.post("novinky.php",function( data ) { jQuery("#novinky").html(data); }); } |
||
_es Profil |
jakre:
„Nenastanou pak problémy s funkcí datum (jako se mi to už jednou stalo)?“ Tá funkcia je mimo riadky 1 až 14 nedostupná, čo sa môže a nemusí hodiť. Nejaké iné „problémy“ z toho nie sú. Akurát je vhodné dať na konci 14. riadku bodkočiarku ( ; ), ak by náhodou 15. riadok začínal niečím, čo by mohlo byť považované za pokračovanie výrazu.
Nie je rozdiel vo funkčnosti kódu ak je medzi <script> a </script> a ak je v externom súbore odkázanom atribútom src .
|
||
jakre Profil |
#23 · Zasláno: 14. 12. 2014, 02:08:48
_es:
„Tá funkcia je mimo riadky 1 až 14 nedostupná“ Kde je nedostupná? Funkce mi vypisuje dny v týdnu do document.getElementById('weekday').innerHTML = weekday[date.getDay()];
a document.getElementById('day').innerHTML = date.getDate(); , takže dostupná je.
|
||
_es Profil |
jakre:
„Kde je nedostupná?“ Presne tam, kde som písal: (function f(){}()); f(); „Funkce mi vypisuje...“ Lebo je volaná len tam, kde dostupná je. |
||
jakre Profil |
_es:
„čo sa môže a nemusí hodiť“ V tomhle případě, kdy mi u té funkce datum jde o to, aby se volala do divů, se to hodí, nebo ne? jakre: „zavolám se pomocí src=""“ Doporučujete funkce volat takto externě v hlavičce souboru, nebo je nechat přímo v souboru, kde se používají? |
||
Časová prodleva: 4 dny
|
|||
jakre Profil |
Vyřešeno. Přidal jsem na web následující script:
jQuery().ready(function (){ getResult(); setTimeout(getResult,5000); }); function getResult() { jQuery.post("novinky.php", function(data) { jQuery("#novinky").html(data); }); |
||
_es Profil |
#27 · Zasláno: 18. 12. 2014, 00:37:56
Pripomienku v [#10] si však nezapracoval.
|
||
jakre Profil |
#28 · Zasláno: 18. 12. 2014, 00:46:22
|
||
_es Profil |
#29 · Zasláno: 18. 12. 2014, 00:49:56
jakre:
„[#26] - opraveno.“ To by ale bola funkcia volaná len dva krát, setTimeout patrí tesne za príkaz v 7. riadku.
|
||
jakre Profil |
_es:
„To by ale bola funkcia volaná len dva krát“ On totiž celý kód vypadá takhle: jQuery().ready(function (){ getResult(); setTimeout(getResult,5000); }); function getResult() { jQuery.post("novinky.php", function(data) { jQuery("#novinky").html(data); }); jQuery.post("blok.php", function(data) { jQuery("#blok").html(data); }); } Je nutné u posledního prvku psát vyznačený středník? |
||
Téma pokračuje na další straně.
|
0