Jak zaladowac plik do DIV i go odswiezyc?

0

Witam.
Potrzebuje zrobic taki myk.
Mam strone z 3 kolumnami.
Te kolumny sa oznaczone


I teraz chcialem zrobic tak:</p>
  1. Zeby do tych divowo zaladowac pliki 1.php 2.php 3.php do kazdej ramki jeden plik
  2. po wcisnieciu guzika zeby sie odswiezyly te pliki ale bez przeladowania strony glownej
    tylko sae ramki ?
    da sie tak?
0

Się da! Skoro te 3 divy mają być ładowane razem, to zrób sobie pomocniczy plik PHP, który zwróci po prostu te trzy (aktualne) divy. Wygodnie będzie też otoczyć te 3 divy jakimś pojemnikiem, czyli po prostu czwartym elementem div.

Gdy strona jest wyświetlana po raz pierwszy, to najzwyczajniej w świecie inkluduj ten plik php z trzema divami (on pewnie będzie sam miał 3 includy).

Co z tym przyciskiem? To idealne zadanie dla technologii Ajax! Użyj więc XMLHttpRequest (w skrócie: XHR), głównego obiektu związanego z tą technologią. Jeśli chcesz go użyć bezpośrednio, to poczytaj troszkę o Ajaxie bo samo uzyskiwanie obiektów jest odrobinę zryte, tzn. w IE trzeba to robić inaczej (Ajax jest jednak stosowany bardzo powszechnie, więc w necie jest pełno opisów co i jak trzeba zrobić). Jeśli na stronie masz już np. jQuery lub inną bibliotekę, to użyj lepiej jej funkcji ajaxowych.

Po kliknięciu przycisku wyślij żądanie ajaxowe do tego pliku, który inkluduje 1.php, 2.php i 3.php. Wynik tego żądania umieść w tym czwartym divie (otaczającym tamte 3 ramki).

Serwer może odpowiadać na żądania ajaxowe na kilka sposobów. Najpopularniejsze to HTML, XML i JSON (możesz na to trafić czytając o Ajaxie). W Twoim przypadku najprościej będzie użyć zwykłego HTML-a.

Jakby spodobała Ci się technologia Ajax, to polecam książkę "Kuloodporny Ajax". Jej autorem jest Jeremy Keith -- bardzo znany propagator standardów sieciowych i twórca kodu frontendowego bardzo wysokiej jakości. Książka jest dość cienka, ale dobrze napisana i tłumaczy nie dość, że od podstaw, to jeszcze tak, byś od razu pisał dobry kod. Zawiera nawet pewne wprowadzenie do JavaScriptu na samym początku.

0

Zrobilem i nie dziala, a mam takie cos:

  1. Plik test.php. Po jego wykonaniu z bazy pobiera mi sie [ID,czas w unixie]
    Ponizej jest petla ktora wypisuje te dane w formie
    ID: 234
    Czas: czas w unizie z bazy - time(); co oznacza ze jesli czas jest wiekszy to odlciza zmieniajac
    sekundy na godziny i minuty odpowiednio. Funkcja ta jest wlaczona jako plik z .js

Ponizej mam

<script>
var now = new Date();

<?
for ($ii = 0; $ii < count($tab_waiting_id); $ii++) {
echo "countdown(new Date(now.getTime() + ($tab_waiting_time[$ii]) * 1000), document.getElementById('counter$tab_waiting_id[$ii]')); ";
}
?>
  </script>

Czyli skrypt z tablicy wie ile bylo wpisow i inicjiuje odiczanie dla kazdego rekordu z bazy. Odswieza to poprzez inner na divie. Jesli uruchomie ten plik z adresu to jest ok, ale jesli pobiore go przez ten zapytanie XMLHttpRequest to nie pokazuje mi w miejscu licznika nic. nie odlicza :( to da sie cos z tym zrobic?

0

OK, czyli ten wyciąg kodu to z pliku test.php. Dla pełniejszego obrazu mógłbyś jeszcze podać przynajmniej fragment HTML-a otaczający test.php (chodzi przynajmniej o tego diva, do którego wstrzykujesz to, co zwróci test.php plus te trzy liczniki). No i kod JavaScript -- konkretnie chodzi o kod przygotowujący i wysyłający żądanie XHR, a także (co ważniejsze) odbierający to żądanie i wrzucający je do diva.

A tak naprawdę to pewnie lepiej pomogłoby demko na żywo. Najlepiej minimalny, ale pełny przykład na to, że normalnie działa, a Ajaxem nie. Ale jeśli całość dokumentu nie jest przesadnie skomplikowana, to może być link do całości.

0

Zatem jest tak:
Gdy otwieram ten plik php:
http://sontex.nazwa.pl/c/p/test.php
Liczniki wysweitlaja sie ok
A jesli otwieram ten plik:
http://sontex.nazwa.pl/c/p/ik.php
to tu juz czas sie nie pojawia.

Plik test.php wyglada tak:

<?
		//connecting to DB
		$db = connect_db();

		//select data
		$result = $db->Execute("SELECT id,ts_time_code_end FROM code LEFT JOIN status ON (active = status.id) WHERE active = 1");
		
		//try error
		if ($result === false) die("Error");

		//icrementation
		$incrementation = 0;

		//get data to table
		foreach ($result as $row) {
			$tab_waiting_id[$incrementation] = $row[0];
			$tab_waiting_time[$incrementation] = $row[1] - time();

			//price div
			$price = $row[3] / 100;
			echo "<div class=\"indent\">";
			echo "<div class=\"fleft\">";
			echo "Kod: <b>$row[2]</b><br />";
			echo "Czas: <b id=\"counter$row[0]\"></b><br />";
			echo "</div>";
			echo "<div class=\"fright\">";
			echo "</div>";
			echo "</div>";
	
			$incrementation = $incrementation + 1;
		}
	?>

		<script>
  		var now = new Date();

			<?
				for ($ii = 0; $ii < count($tab_waiting_id); $ii++) {
				echo "countdown(new Date(now.getTime() + ($tab_waiting_time[$ii]) * 1000), document.getElementById('counter$tab_waiting_id[$ii]')); ";
				}
			?>

  		</script>

Funkcja ktora wywoluje countdown w .js jest taka:

function countdown(targetDate, displayElement, onCountdownFinish /* = null*/) {
  if (!(targetDate && displayElement)) {
    return;
  }
  var formatTimeInterval = function(seconds) {
    var hrs = Math.floor(seconds / 3600)
    var min = Math.floor(seconds / 60) % 60;
    var sec = seconds % 60;
    return (hrs + ':' + min + ':' + sec).replace(/(^|:)(\d)(?=:|$)/g, '$10$2');
  };
  var refreshTimer = function() {
    var now = new Date();
    var diffMilliseconds = targetDate.getTime()  - now.getTime();
    var diffSeconds = Math.floor(diffMilliseconds / 1000);
    if (diffSeconds < 0) {
      diffSeconds = 0;
    }
    displayElement.innerHTML = formatTimeInterval(diffSeconds);
    if (diffSeconds === 0) {
      clearInterval(intervalId);
      if (typeof onCountdownFinish === 'function') {
        onCountdownFinish(targetDate);
      }
    }
  };
  var intervalId = setInterval(refreshTimer, 1000);
  refreshTimer();

}

Natomiast plik ik.php ktory wysweitla link ze po kliknieciu uzywa HTTP REQUEST wyglada tak:

<script type="text/javascript" language="javascript">
    function makeRequest(url) {
        var httpRequest;

    	var rr = document.getElementById("ttimer");

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
                // See note below about this line
            }
        } 
        else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } 
            catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } 
                catch (e) {}
            }
        }

        if (!httpRequest) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
        httpRequest.open('GET', url, true);
        httpRequest.send('');

    }

    function alertContents(httpRequest) {

        if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
               // alert(httpRequest.responseText);
	rr.innerHTML = httpRequest.responseText;
            } else {
                alert('There was a problem with the request.');
            }
        }

    }
</script>
<span
    style="cursor: pointer; text-decoration: underline"
    onclick="makeRequest('test.php')">
        Make a request
</span>

<div id="rr"></div>

Make Request powinien wczytac w diva o ID = rr wlasnie te liczniki. ta strone wygenerowana w PHP ?
a czas sie nie pokazuje ;( i nie wiem co jest zle. moze to jakas inna funkcja powinna byc czy cos.

0

skrypty js sie nie odpalaja w contencie ładowanym ajaxem.

0

A da sie to jakos obejsc zeby sie ladowalo ?
nie mam pomyslu juz zadnego :(
czy pozostaje mi zrobic Iframe?

0

@masterO:
W funkcji alertContents używasz zmiennej rr, ale ona jest zadeklarowana w funkcji makeRequest, a więc jest lokalna dla funkcji makeRequest i nie jest poza tą funkcją widoczna.

Zmienna rr to referencja do elementu div przechowującego wynik. Przypadkowo w większości przeglądarek to Ci zadziała, bo kiedyś było tak, że jak napisałeś w kodzie JavaScript costam.innerHTML = 'abc', to jeśli istniał element o id costam, to powyższy kod działał jak: document.getElementById('costam').innerHTML = 'abc'. Polecam to jednak zmienić; nie należy na tym polegać.

Inna sprawa, że pokićkało Ci się, który plik ma być pełnym dokumentem HTML, a który tylko fragmentem.

Strona, której adres wpisuje użytkownik w pasku adresu przeglądarki musi być prawidłowym dokumentem HTML. Powinna zawierać elementy head z wszelkimi arkuszami stylów oraz body z treścią, a wszystko to zamknięte w elemencie html. Czyli np. plik ik.php musi generować taki pełny, poprawny dokument.

Z kolei Ajax pobiera fragmenty HTML-a. Nie całe dokumenty; to nie jest iframe. Dlatego plik PHP, który odpowiada na żądania ajaxowe powinien wypluwać tylko 3 divy + elementy script, nic więcej. Żadnego head z meta, title itd. Nawet żadnego body. Ma zawierać ten kod, który normalnie wstawiłbyś na stronę. U Ciebie tym plikiem jest test.php i zwraca on... cały, pełny dokument XHTML :/.

Zobacz. Załóżmy, że masz taki dokument (to HTML5, ale podobnie by to wyglądało dla HTML-a 4.01):

<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <title>Tytuł</title>
</head>
<body>
  <h1>W poniższego diva chcę wstawić paragraf z tekstem!</h1>
  <div id="zawartosc">
  </div>
</body>
</html>

I teraz chcesz do diva #zawartosc wstawić paragraf z tekstem "Bla bla bla". Jaki kod HTML umieszczasz wewnątrz tego diva? Czy wstawiasz tam cały dokument, o tak?

<!DOCTYPE html>
<htm>
  <head> ...</head>
  <body>
    <p>Bla bla bla</p>
  </body>
</html>

Nie! Wstawiasz po prostu... paragraf z tekstem:

<p>Bla bla bla</p>

Tylko ta jedna linijka ląduje w divie #zawartosc. To naprawdę takie proste.

Ajax nie operuje na ramkach. Divy to nie są ramki. To nie frame, to nie iframe. W Ajaxie prosisz serwer o mały wycinek HTML-a. Tylko to, czego potrzebujesz: np. trzy divy plus znacznik script. I serwer Ci to zwraca jako zwykły tekst; nie jest to otoczone żadnym <body>, nie ma żadnego doctype'a. Serwer zwraca zwykły fragmencik HTML-a, a Ty go sobie wstawiasz za pomocą innerHTML we właściwe miejsce.

Popraw błędy, które tutaj wymieniłem, bo zebrało ich się troszkę zbyt dużo byśmy mogli porządnie zdebugować ten kod. Aha, zadbaj o to, żeby każde dołączenie skryptu wyglądało dokładnie tak:

<script type="text/javascript">
// tu ląduje kod JS
</script>

lub tak:

<script type="text/javascript" src="sciezka/do/skryptu.js"></script>

Zauważ, że jest tam atrybut type i ma mieć wartość text/javascript. Nie ma tam za to żadnego atrybutu language (niezgodnego ze specyfikacją). U Ciebie widzę, że większość tagów script masz dobrze, ale czasami piszesz je z atrybutem language (nieprawidłowy atrybut) lub nawet bez niczego (co prawidłowe będzie dopiero w HTML-u 5).

Nie rób iframe, spróbuj się nauczyć Ajaxa. Ramek się już od dość dawna nie używa. Przynajmniej omijają je ci, którzy wyszli poza technologię z połowy lat 90 ubiegłego wieku ;). IMO w obczajenie Ajaxa warto zainwestować jak w mało co. Jest już praktycznie powszechnie używany, jest lepszy niż ramki (nieco szybszy i bezpieczniejszy) i potrafi rzeczy, o których ramki mogłyby pomarzyć. Gdy go zrozumiesz (co nie jest wcale takie trudne), to zobaczysz te wszystkie rzeczy.

0

Skrypty zostaly poprawione i teraz tak:

Plik glowny html wyglada tak:


<? 
 require('./common.php'); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>PAY</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="default.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
	@import url("layout.css");
-->
</style>



<script type="text/javascript">
    function makeRequest(url) {
        var httpRequest;

    	var rr = document.getElementById("ttimer");

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
                // See note below about this line
            }
        } 
        else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } 
            catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } 
                catch (e) {}
            }
        }

        if (!httpRequest) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
        httpRequest.open('GET', url, true);
        httpRequest.send('');

    }

    function alertContents(httpRequest) {

        if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
               // alert(httpRequest.responseText);
	rr.innerHTML = httpRequest.responseText;
            } else {
                alert('There was a problem with the request.');
            }
        }

    }
</script>


<script type="text/javascript" src="./js/advajax.js"></script>
<script type="text/javascript" src="./js/segment.js"></script>
<script type="text/javascript" src="./js/timer.js"></script>
</head>
<body>
 


    
<span
    style="cursor: pointer; text-decoration: underline"
    onclick="makeRequest('test.php')">
        Make a request
</span>

<div id="rr"></div>

</div>

</body>
</html>

Nastepnie plik test.php


require('./common.php'); 
	
		//connecting to DB
		$db = connect_db();

		//select data
		$result = $db->Execute("SELECT pay_code.id,id_company,code,price,active,ts_time_code_end,status.name FROM pay_code LEFT JOIN status ON (active = status.id) WHERE active = 1");
		
		//try error
		if ($result === false) die("Error");

		//icrementation
		$incrementation = 0;

		//get data to table
		foreach ($result as $row) {
			$tab_waiting_id[$incrementation] = $row[0];
			$tab_waiting_time[$incrementation] = $row[5] - time();

			echo "Czas: <b id=\"counter$row[0]\"></b><br />";
			echo "<br />";
	
			$incrementation = $incrementation + 1;
		}
	?>

	<script>
  		var now = new Date();

			<?
				for ($ii = 0; $ii < count($tab_waiting_id); $ii++) {
				echo "countdown(new Date(now.getTime() + ($tab_waiting_time[$ii]) * 1000), document.getElementById('counter$tab_waiting_id[$ii]')); ";
				}
			?>

	

  </script>

Funkcja countdown sie nie zmienia z poprzednich postow ta sama. Nadal nie pokazuja sie liczniki. Po przegrzebaniu sieci jak zwykle jest wszystko i nic. Jedni pisza zeby uzyc funckji EVAL, inni ze JNOSP jeszce inni ze sie nie da. Kolejna sprawa to uzyc

<script id="cos"><script>

Teraz tak, ten ostatni sposob ze script id dziala za pierwszym razem gdy uruchomie strone. To znaczy ze po wcisnieciu guzika z REQUEST wczytuje plik PHP do diva. a na glowna strone wczytuje do SCRIPT ID wlasnie wygenerowanego scripta i odlicza. Problem jest taki ze srypt id jest na glownej stronie a kazde wcisniecie request zmienia zawartosc samego DIV a i ponownie uruchamia funkcje licznikow. czyli nie kasuje tych funkcji co sa powolane w [script id]. Wiec sa dwa wyjscia albo zrobic te liczniki w JS zeby jakos kasowal te liczniki co wczesnije powolal, albo nie wiem moze dac generowanie test.php i oddzielnie jakis plik co zmieni zawartos tych sript id ... zaraz sprawdze bo juz nie mam pomyslow :/

0

Tia, będziesz musiał inaczej odpalać te skrypty niż poprzez wrzucanie ich do HTML-a za pomocą innerHTML. Ze względów bezpieczeństwa przeglądarka nie odpala tagów <script> w momencie ustawienia innerHTML. Pisał o tym @nav, ale dotyczy to nie tylko Ajaxa, tylko samej własności innerHTML.

Jedno z rozwiązań to użycie JSON-a. To będzie najbezpieczniejsze, choć odrobinę skomplikowane. Nie mam teraz czasu, by to wytłumaczyć. JSON-em musiałbyś przekazać strukturę z wszelkimi informacjami potrzebnymi do odpalenia liczników. Być może wystarczyłaby tablica z czasami docelowymi -- dla 3 liczników byłaby to tablica 3 elementów. Następnie robisz funkcję, która jako argument dostaje tę strukturę (tablicę z czasami) i na jej podstawie wywołuje kilkakrotnie countdown.

Prostsza wersja zakłada przesłanie samego tekstu skryptu do wykonania, tj. odpowiedź z serwera powinna zawierać czysty kod JavaScript (bez żadnych tagów script etc.) z wywołaniami countdown. Ten kod potem odpalasz evalem. Jest to jednak mniej bezpieczne rozwiązanie.

W obu przypadkach będziesz cierpiał z tego powodu, że funkcja countdown odpalona dwa razy z tym samym elementem zachowuje się dziwnie. Istotnie, należy ją zmodyfikować tak, żeby kilka wywołań na tym samym elemencie resetowało się wzajemnie i by aktualne pozostawało jedynie to ostatnie.

Pisaliśmy o tym kiedyś w mailu; nie wiem czy już nawet nie napisałem Ci tej przeróbki. Powiedziałeś, że coś tam sprawdzisz i się odezwiesz, ale się nie odezwałeś, więc jej nie wysłałem.

I spokojnie: to się na pewno da zrobić. Tagi script są blokowane podczas użycia innerHTML, ale można to obejść. Najbezpieczniej JSON-em, ale w razie czego można zwykłym evalem. Tak naprawdę to do JSON-a ludzie też używają evala, ale jest on o tyle bezpieczniejszy, że dostępne są opensource'owe parsery JSON-a, które przepuszczają jedynie poprawny JSON. Dopiero taki bezpieczny kod przesyła się do evala.

0

HURAAAAAAAAAAAA! UDAŁO SIEEEEE.

Dokładnie to zrobiłem tak. na stronie HTML jest guzik. Po wciśnieciu generuje on HTTPRequest do pliku test.php. Ten plik zwraca nam zgodnie z zaleceniami sam kod HTML łacznie z tagami SCRIPT. I zwyczajnie poprzez funkcje EVAL przepuszczam tagi SCRIPT ktore sa normalnie wykonywalne jak zwykly skrypt. Co najlepsze nie ma konfliktu kilku funkcji JS odliczajacych ponieważ strona test.php za kazdym REQUESTEM jest odswieżana na nowo z ponownymi funkcjami odliczania w tagach SCRIPT. Mam nadzieje ze to dobrze działa bo normalnie 3 dni siedzenia a tylko z 5 linijek kodu wiecej i działa.

Dziekuję Wszystkim, którzy pomagali, jakby co to się tu odezwe bo nie moge uwierzyć, że działa.

0

@masterO:
Hah, a ja Ci właśnie wysłałem maila ze zmodyfikowaną funkcją countdown!

Widzę, że sam wpadłeś na rozwiązanie i je zrozumiałeś. Ale szczerze mówiąc celowo nie chciałem Ci go podpowiadać. Wypróbuj proszę tę nową funkcję, co Ci przesłałem. Bo to, co masz, działa, jednak z drugiej strony... nie wiem, czy się domyślasz, ale jest tak, że te wszystkie poprzednie countdowny sobie u Ciebie wciąż chodzą w tle. Po prostu tego nie widać, bo divy, do których referencje im przekazałeś nie znajdują się już w HTML-u (zostały zastąpione przez nowe divy po odświeżeniu, więc referencje do tych starych prowadzą gdzieś w kosmos). Więc tak naprawdę te "stare" countdowny u Ciebie wciąż chodzą po resecie, czego nie widać (bo czas wyświetlają w divach, które są "w kosmosie"), ale co może spowolnić stronę.

Spróbuj więc wdrożyć tę nową funkcję. Ona naprawdę przed tym zabezpiecza, mając wewnętrzną mapę element-intervalId. Gdy drugi raz wywołasz nową funkcję countdown na tym samym elemencie, to najpierw znajdzie ona w tej mapie intervalId poprzedniego wywołania i ubije je używając clearInterval. Na koniec sama się dopisze do mapy oznajmiając wszystkim, że teraz to ona odświeża dany element. Trzecie wywołanie coutndown na tym samym elemencie zobaczy ten wpis i również go zresetuje, a wpisze samą siebie itd.

Nowej funkcji używa się tak samo jak starej, więc jeśli niczego nie sknociłem, to powinno to Ci od razu działać.

0

Z opisu brzmi prosto. Jesli funkcja zadziala to w polaczeniu z Evalem Bedzie idealnie chodzic. Teraz jest tak ze glowna strona nie ma zadnych sryptow wykonujacych w tle. Skrypty wykonujace odlicznie umiescilem w tym co zwraca innerHTML. i nie wiem czy mimo wszystko te countdowny dzialaja mimo odswiezania inner czy nie. Dla pewnosci przeniose funkcje glowna odliczania do strony glownej. Funkcja script inicjalizujaca liczniki dam do innera ktory jest generowany z php i dodatkowo wstawie funkcje usuwajaca z mapy poprzednie wpisy.

P.s. Co sie stanie jesli funkcja count down nie zostanie uruchomiona ponownie a czas sie skonczy? czy wtedy mam recznie odswiezyc liczniki? no bo jesli uruchomie funkcje kilka razy to bedzie odliczac az do 0000 ale nie sprwi mi to ze w tle sie uruchomi ten sam ID licznika. A jak sie licznik skonczy to ta mapa nie zamknite go? bo po odswiezeniu nie pojawi sie z PHP juz nr licznika ktory przed chila działał i był w tle.

0

Te countdowny wciąż działają mimo odświeżenia fragmentu strony (gdybyś przeładował całą stronę, to już by nie działały). Po prostu jest tak, że wywołanie starej wersji countdown dla elementu E powoduje, iż w tle zaczyna sobie chodzić funkcja uaktualniająca licznik w elemencie E. Chodzi ona sobie kilka razy na sekundę aż do wygaśnięcia licznika -- wtedy się ubija.

Gdy odpalisz funkcję countdown dla elementu E i będzie odliczała od 10 sekund w dół, a po powiedzmy 3 sekundach odpalisz funkcję countdown drugi raz dla tego samego elementu, to mimo iż wyświetlana będzie tylko ta druga, tej pierwszej zostało jeszcze 7 sekund i będzie to sobie w tle chodziło przez te 7 sekund razem z tym drugim wywołaniem countdown. Oczywiście gdy na liczniku jest kilka minut, to przez te kilka minut możesz wywołać countdown np. 10 razy i wtedy może być tak, że chodzi Ci w tle 10 funkcji, z czego widzisz działanie tylko jednej.

W nowej wersji wywołanie countdown dla E powoduje wpisanie do mapy przy elemencie E identyfikatora tego wywołania. Drugie wywołanie countdown sprawdza w mapie, czy jest tam identyfikator dla elementu E. Jeśli jest -- bo pochodzi z poprzedniego wywołania countdown -- to najpierw ubija to wywołanie korzystając z identyfikatora. Potem wpisuje pod pozycją E swój własny identyfikator i chodzi sobie w tle już samotnie i schludnie aż do osiągnięcia 0000, kiedy to się sama ubija. Naturalnie, zanim licznik osiągnie zero może nastąpić kolejne wywołanie countdown dla E i wtedy to kolejne wywołanie najpierw ubije to poprzednie, a potem zacznie samo chodzić.

Jak widzisz, osiągnięcie 0000 nic tu nie przeszkadza. Po prostu funkcja kończy działanie i sprząta po sobie.

0

No to Miodzio, temat chyba wyczerpany na cacy, bo nic dodac nic ujac. Jezuuu od piatku walki king fu. Powiem wam ze google to jednak szajs. To znaczy w sensie ze sa tam wszystkie mozliwe teorie :) tak dziala, tak nie dziala, nie dziala , nie nie działa. Krotko mowiac sprawdzilem ze 20 sposobów, aż skumałem co i jak. w SPACJA końcu Dzieki podpowiedzi powyższego autora eval zadziałało :D Nawet fajny ten ajax. Właściwie to już nie wiem czy jest sens robić jakieś formularze bez jaaxa bo tu mamy mega możliwości. a XML to bajka jest.

1 użytkowników online, w tym zalogowanych: 0, gości: 1