21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Vladimír Zeman
Profil
Udělal jsem si pomocí AJAX vybírání článku. Problém je, že při načítání stránky pomopcí AJAXu se načítá cca 20 malých (20*5kb) obrázků a stránka tedy chvíli pracuje a až potom stránku zobrazí. Rád bych tam tedy na tu chvíli vložil malou ikonku () a až by se stránka načetla, tak by ikonka zmizla. Google mi našel nějaká řešení, vše ale bylo napsáno pro ASP. Neví někdo jak na to?

<select name="vyber" id="vyber" onchange="vyberHry();">
   <option value="http://www.web.cz/cache/nejlepsi7.php">7 dnů</option>
   <option value="http://www.web.cz/cache/nejlepsi14.php">14 dnů</option>
</select>

<div id="mistoZobrazeni"></div>
Taps
Profil
Vladimír Zeman
Tak nějaká taková vychytávka by se mi taky hodila
Leo
Profil
Proste pri odeslani pozadavku ikonku zobrazte, a az prijde 200 OK tak ji zruste, Leo
ah01
Profil
Leo
Pokud jsem to pochopil správě, tak to neřeší problém.

Vladimír Zeman
Viděl bych to na tento postup.
1) Poslat požadavek, zobrazit ikonu.
2) přijde 200 OK - vložím html kód do stránky a projdu přes DOM všechny obrázky, v daném článku a na všechny navěsím onload. Zároveň si spočítám jejich počet, v každém onload jej dekrementuji a ve chvíli, kdy jsem na 0, schovám ikonu. Plus nějaký bezpečností timeout, aby tam ta ikona furt nestrašila, pokud se něco nepovede stáhnout.

Není to moc elegantní, ale mělo by to fungovat. Pokud na to použiješ např. jQuery, tak by to mohlo být dost rychle naspaný.
Vladimír Zeman
Profil
ah01
Asi jsem zapomněl zmínit, že v AJAXu nejsem moc pokročilí a tudíž jsou věci (v teoretocké rovině) pro mě ne příliš srozumitelné. A nešlo by to i nějak jednoduššeji? Obrázky se zobrazují v jednom divu (nebo mohou v čemkoli jiném), tak jestli by nešlo pracovat jen s tím divem a ne s každým obrázkem zvlášť.
habendorf
Profil
Krapet mimo téma - myslím že tohle zrovna není ideální použití AJAXu.
ah01
Profil
Vladimír Zeman
Teď jsem koukal, že v jQuery je událost load, která cituji „For elements, it fires when the target element and all of its content has finished loading.“. Což by se tobě mohlo hodit. Pokud už budeš koukat na jQuery, mrkni se na podporu AJAXu, kterou nabízí, určitě ti to dost ulehčí prácí.

habendorf
Taky bych řekl, ale i to se dá dělat. Např. jQuery umožňuje přímo nahrát obsah (do elementu s id links nahraje tagy li z elementu s id abc ze stránky Main_Page)
$("#links").load("page.html #abc li");
habendorf
Profil
ah01

Jasně že se dá. Ale nějak mi v tomto případě uniká smysl. Připadá mi tak trochu jako simulace frames.
Taps
Profil
MOžná by nebylo špatné kdyby sem někdo kdo má zkušenosti napsal kod, který by se hodil i méně zkušeným uživatelům
Leo
Profil
"MOžná by nebylo špatné kdyby sem někdo kdo má zkušenosti napsal kod, který by se hodil i méně zkušeným uživatelům"

Kod ceho? Leo
Taps
Profil
Leo
Nějakého funkčního skriptu
Leo
Profil
"Nějakého funkčního skriptu"

Ktery ma delat co? Leo
HGD
Profil
2 Leo co si takle pročíst celej topic? možná že bys i pochopil o čem je tu řeč...
ah01
Profil
Takže příklad, jo? Tak třeba:
$(function(){

  function load(url){
    $("#ikona").show();
    $("#mistoZobrazeni").load(url, null, function(){  
      var imgs = $(this).find("img");
      var count = imgs.size();
      if(count <= 0){ 
        $("#ikona").hide();
      } else {
        imgs.map(function(){
          $(this).load(function(){
            if(--count <= 0) $("#ikona").hide();
          });
        });
      }
    });
  }

  $("#ikona").hide();
  $("#vyber").change(function(){
    load(this.value);
  });
  
});

Abyste neřekli, že je to změť nějakého kódu, tak v reálu to je nějak takhle http://jslab.net/pub/jpw/ajax-load/ . Navíc je tam doplněn timout a trochu komentářů.
Taps
Profil
ah01
super...díky..a bude to fungovat i když odesílám data na jinou stránku pomocí metody post ?
Stepan
Profil *
No tenhle kodmi prijde trochu silenej.. programuju sice s jquery asi tri dny ale udelal jsem to takhle:

    
$(document).ready(function() {
      $("a.load_photos").click(function() {
        $(".loading").show();
        $("#uploaded").load("index.php?name=gallery..." .images, function(){$(".loading").hide();});  
      });
     });


Vysvetleni: po kliknuti na odkaz se tridou "load_photos" se zobrazi div se tridou "loading" pak se do id "uploaded" nahraje stranka "index.php..." ale jen to co je na te strance ve tride "images", az se to vykona tak pres funkci callback //load( url, params, callback )// schovam div "loading".

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