« 1 2 »
Autor Zpráva
jakre
Profil
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
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
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
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
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
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
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
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
[#11] jakre:
Myslel to asi tak, že v kóde [#7] sa vymaže príkaz so setInterval a hneď za jQuery("#vypis").html(data); dáš setTimeout(getResult,5000);.
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
[#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
[#15] jakre:
Nerozumiem asi celkom, na čo sa pýtaš. JS kód v [#13] nič nerobí, lebo tam máš len definíciu jednej funkcie, ktorú nikde nevoláš.
V [#15] je to iné. Funkcia datum, aj keď len s lokálnou platnosťou, je hneď aj volaná - operátor () v poslednom riadku.
jakre
Profil
_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);
    });
}
. A pak jsem se ptal, na sjednocení uvedené funkce do jednoho tagu <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
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
_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();
V druhom riadku vznikne chyba.

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í?
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
Pripomienku v [#10] si však nezapracoval.
jakre
Profil
_es:
Tu jsem zapracoval do kódu [#15].
Díky za upozornění, u druhého kódu jsem zapomněl.

[#26] - opraveno.
_es
Profil
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?
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0