Hirdetés

Keresés

Új hozzászólás Aktív témák

  • shev7
    veterán

    Sajnos valamiért nem várja meg timeouttal sem, ha lassan válaszol a szerver :( (IE8 alatt néztem).

    akkor erre rosszul emlekeztem, de vegul is van benne racio. Akkor a fabaltas modszer az, hogy a resonse text elejehez hozzafuzod a felkuldott idt, es levagod mikor visszakapod.

    Van meg par megoldas, de talan ez a legegyszerubb...

  • shev7
    veterán

    Végülis blokkolnia is kell, mert a következő selectben addig úgyse tudna mit csinálni... hiszen nem jelenik meg. Vagy akkor is gond? (a többi felhasználóra nem hat, nem???)

    Az id-t elküldöm még oké... beteszem ebbe:
    xmlhttp.open("GET","adataim_2_selectekhez.php?kivalasztott="+kivalasztott+"&mi="+mi+"&sorszam="+sorszam+"&preselect="+kov_preselect+"&id="+hova,false);

    ...de hogy küldöm vissza és hogy használom fel? Mit kell hozzá máshogy csinálnom?

    Most az 'adataim_2_selectekhez.php' egyszerűen kiprinteli a megfelelő selectet.

    nem kell blokkolnia... Ha timeout-tal hivod, akkor sem blokkol, de megvarja a server valaszat az elozo keresre...

  • shev7
    veterán

    Közben gugliztam tovább, találtam egy megoldást, csak ez meg lassú...

    xmlhttp.open("GET","adataim_2_selectekhez.php?kivalasztott="+kivalasztott+"&mi="+mi+"&sorszam="+sorszam+"&preselect="+kov_preselect,false);

    Így megvárja mindig a szerver válaszát... kérdés, hogy van e ennél jobb módszer? Illetve hogy ez 100%-os e...

    ez nem jo, mert az asyncron hivast szinkronna teszi. Ajax-nak pont az async a lenyege. igy a weboldalad blokkol amig nem kap vissza valaszt a szervertol, amit te nem akarsz.

    A legjobb, hogy ha annak a div-nek az id-jet is felkuldod a szervernek amit updatelni akarsz, es a response-ban visszakuldod.

  • Male
    nagyúr

    Köszi, közben tapasztalom is amit írsz... ha valamiért az egyik lassabban végez (a php-ba ami kiprinteli a következő selectet betettem egy sleep-et előre, szimulálandó ezt a dolgot), akkor összekavarodnak a válaszok :(

    Hogy lehet akkor ezt biztosan megkerülni? Valahová gondolom kéne egy utasítás, ami megvárja a választ... de hová, és mi az? :B

    Közben gugliztam tovább, találtam egy megoldást, csak ez meg lassú...

    xmlhttp.open("GET","adataim_2_selectekhez.php?kivalasztott="+kivalasztott+"&mi="+mi+"&sorszam="+sorszam+"&preselect="+kov_preselect,false);

    Így megvárja mindig a szerver válaszát... kérdés, hogy van e ennél jobb módszer? Illetve hogy ez 100%-os e...

  • shev7
    veterán

    Megoldottam... de valaki ezt magyarázza meg nekem, mert nem bírom felfogni...

    Tehát ehelyett:

    <script type="text/javascript">
    showSelects('3','fo','4','kepes4_al','3');
    showSelects('3','al','4','kepes4_szint','3');
    </script>

    Ezt használva:

    <script type="text/javascript">
    showSelects('3','fo','4','kepes4_al','3');
    var t=setTimeout("showSelects('3','al','4','kepes4_szint','3')",0);
    </script>

    ...tökéletesen működik...
    Tehát 0 ezredmásodpercig váratom, és akkor jól megy... mégis mi a fenét befolyásol ez???

    azert mukodik igy, mert ha timeout-ot hivsz akkor a kovetkezo tortenik:

    a hivas bekerul egy hivasi sorba, es akkor kerul meghivasra, ha az ido lejart, es eppen semmi nem fut (javascripted egy szalon fut). Ebben az esetben ez azt eredmenyezi, hogy a fuggvenyed masodszor akkor hivodik meg amikor az elso mar biztosan befejezodott, igy nem tudnak osszeakadni.

  • Male
    nagyúr

    Remélem tudtok segíteni... előzetesen: egyáltalán nem értek a JavaScripthez, a w3cschoolról szedtem le az egyik mintát, azt írtam át kicsit, hogy nekem jó legyen.

    Amit csinálok: egy selectnél ha kiválaszt valamit a felhasználó, akkor mellette megjelenik a másik select a kiválasztottnak megfelelően, aztán ha ott is választ, akkor a harmadik. Ehhez a select tagnél az "onchange"-et használom, ez hívja meg a scriptet. Ez alapvetően működik is szépen, viszont előfordul, hogy eleve úgy kell kitennem az oldalt, hogy már mindhárom select látszik és ki is van választva valami. Naívan azt hittem, hogy ilyenkor egyszerűen meghívom kétszer a scripetem, ahogy az onchange tenné, és kész is.. de sajnos nem megy, mindig csak a másodiknak az eredménye jelenik meg (ha felcserélem, akkor is a második működik).

    Mi lehet a gond? Nem lehet kétszer meghívni ugyan azt a függvényt???

    Tehát ezt csinálom amiből valamiért csak a második jelenik meg az oldalon:

    <script type="text/javascript">
    showSelects('3','fo','4','kepes4_al','3');
    showSelects('3','al','4','kepes4_szint','3');
    </script>

    A 4 paraméter:
    - Mi van az adott selectben kiválasztva éppen
    - Al vagy fő kategória az adott select
    - Hányadik select blokk
    - A span id-je, ahová majd teszi a kimenetet (vagyis a köv. selectet)
    - A következő selectben mi van előre kiválasztva

    A scriptem pedig:

    <script type="text/javascript">

    function showSelects(kivalasztott,mi,sorszam,hova,kov_preselect)
    {
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById(hova).innerHTML=xmlhttp.responseText;
    }
    }
    xmlhttp.open("GET","adataim_2_selectekhez.php?kivalasztott="+kivalasztott+"&mi="+mi+"&sorszam="+sorszam+"&preselect="+kov_preselect,true);
    xmlhttp.send();
    }

    </script>

    Megoldottam... de valaki ezt magyarázza meg nekem, mert nem bírom felfogni...

    Tehát ehelyett:

    <script type="text/javascript">
    showSelects('3','fo','4','kepes4_al','3');
    showSelects('3','al','4','kepes4_szint','3');
    </script>

    Ezt használva:

    <script type="text/javascript">
    showSelects('3','fo','4','kepes4_al','3');
    var t=setTimeout("showSelects('3','al','4','kepes4_szint','3')",0);
    </script>

    ...tökéletesen működik...
    Tehát 0 ezredmásodpercig váratom, és akkor jól megy... mégis mi a fenét befolyásol ez???

Új hozzászólás Aktív témák