Problem z setinterval

0

Witam,
Posiadam mały problem z funkcją setinterval a mianowicie działa jeśli jej wywołanie wrzucę w znaczniki skryptowe a nie do końca jeśli wywołanie generuję funkcją wywoływaną przez zdarzenie onclick buttona.
Jeśli wywołuję ją przez onclick to wygląda na to, że wykonuje się raz (pojawia się jedna kreseczka |) a później strona/div? jakby sie przeładowywał i nie działa więcej. Proszę nie sugerować się funkcją wykonywaną w interwałach bo jest tylko przykładowa. Docelowo będzie doczytywała informacje z bazy danych.

Ktoś ma pomysł czym to jest spowodowane?

pozdrawiam panter182

<code = php><HTML>

<head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-1250" /> <meta http-equiv="Content-Language" content="pl" /> ``` <script type="text/javascript" src="skrypty/wybor.js"></script> ```javascript <script type="text/javascript"> var idInterwalu;

function odliczaj()
{
idInterwalu = setInterval('doczytaj()', 600);
alert('funkcja odliczaj dziala');
}

function doczytaj()
{
document.getElementById("informacja").innerHTML += "|";
}

function zatrzymaj()
{
clearInterval(idInterwalu);
}
//idInterwalu = setInterval('doczytaj()', 600); tutaj dam to dobrze dziala
</script>

```php
</HEAD>
<BODY>

<br><br><br><br><br><br><br>
<?php
if((isset($_SESSION['zalogowano'])) && ($_SESSION['zalogowano']=='tak'))
	{
				?><form action="index.php?id=skrypty/zarzadzanie" method="POST">
				
			<table>
			<tr>
			<td>Komenda System:</td> 
			<td><input type=text name="komendasystem"></td>
			<td><input type=submit value="Wykonaj" onclick="odliczaj()" name="wsystem" class="button" ></td>
			<td><input type=submit value="Zatrzymaj" onclick="zatrzymaj()" name="wsystem" class="button" ></td>
			</tr>
			<tr>
			<td>Komenda MYSQL:</td>	<td><input type=text name="komendasql"></td>
                                      <td><input type=submit value="Wykonaj" name="wbaza" class="button" ></td>
			</tr>
						
			</table>
			</form>
					
				<?php
		if (isset($_POST['wsystem']))
			{
				include "skrypty/baza.php";
				if($_POST['komendasystem']!="")
				{
					$ins = mysql_query("INSERT INTO `KOMENDA` set komenda='".$_POST['komendasystem']."'");
					echo "Komenda systemowa wykonana";
				}
				?>				
				<form>
					<strong>Wybierz część</strong>
					<select name="rekord" onchange="showPart(this.value)">
					<option value="logowanie">logowanie</option>
					<option value="czujniki">czujniki</option>
					<option value="komenda">komenda</option>
					</select>
				</form>
				<br />
				<div id="informacja">Ładowanie: </div>
					
				<?php			
			}
		elseif (isset($_POST['wbaza']))
		{
			include "skrypty/baza.php";
			if($_POST['komendasql']!="")
			{
				$result = mysql_query("".$_POST['komendasql']."");
				echo "Komenda SQL wykonana";
			}
			if($_POST['komendasql']!="")
			{
				$mysql_num = mysql_num_rows($result); // liczy ilosc wierszy
				if($mysql_num >0)
				{
					//cos tam cos tam
					
					print "<table border '1'>\n";
					while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) 
						{
						   print "\t<tr>\n";
						   foreach ($line as $col_value) 
						   {
							   print "\t\t<td>$col_value</td>\n";
						   }
						   print "\t</tr>\n";
						}
						print "</table>\n";
				}
				else
				{
					
					$result = mysql_query("select * from komenda");
					print "<table border '1'>\n";
					while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) 
						{
						   print "\t<tr>\n";
						   foreach ($line as $col_value) 
						   {
							   print "\t\t<td>$col_value</td>\n";
						   }
						   print "\t</tr>\n";
						}
						print "</table>\n";
				}
			}		
		}
	}
else
	{
		echo "Nie posiadasz uprawnień do zarządzania tym modułem :)";
	}

 ?> 
 </BODY>
 </HTML>
0

pomimo jednego ostrzeżenia (sprawdź sobie w "Code" na dole po lewej) to wszystko jest dobrze, u mnie działa, tutaj działa: http://jsbin.com/afexop/edit#preview

Być może coś innego przerywa Ci działanie skrytpu. Firebuga, bądź pochodnych dla innych przeglądarek używasz? Pokażą Ci błędy jak coś.

0

Dzięki za zainteresowanie tematem.
Problem o którym pisałeś juz rozwiązałem chodziło o forme przekazywania nazwy funkcji powinno być idInterwalu = setInterval(doczytaj, 600); a nie idInterwalu = setInterval("doczytaj()", 600)
jednakże nie pomogło to w żadnen sposób i dalej z jakiegoś powodu nie działa. Stronka do testów stoi na wampie a problem pojawia się zarówno w Operze jak i w FF i IE.
Gdyby w ogole nie dzialalo to pol biedy bo predzej bym sobie poradzil, ale to nie dziala tylko wywoływane z funkcji poza funkcja jako skrypt smiga normalnie. :/

0

Witam,
niestety dalej nie udalo mi się rozwiązać tego błędu.
W konsoli Opery znalazłem błąd:

[2011-09-23 1143] JavaScript - http://localhost/system/index.php?id=skrypty/zarzadzanie
Uncaught exception: TypeError: Cannot convert 'document.getElementById("informacja")' to object
Error thrown at line 12, column 2 in doczytaj() in http://localhost/system/index.php?id=skrypty/zarzadzanie:
document.getElementById("informacja").innerHTML += "|";

zmieniłem na
var tmp = document.getElementById("informacja");
tmp.innerHTML += "|";

ale również nie pomogło

0

Nie przeładowywuje Ci strony, jak klikniesz na przycisk "Odliczaj"? Ten przycisk jest typu submit, co znaczy że wywołuje metodę submit formularza...

0

Dzięki!
Faktycznie jak dam type=button to smga dobrze tylko pytanie jak zrobić żeby przycisk działał zarówno jako submit i button?

0

Spraw, żeby button był normalnym przyciskiem wysyłającym formularz, a w formularzu dodaj zdarzenie onformsubmit:

<form action="index.php?id=skrypty/zarzadzanie" onsubmit="jakastamFunkcjaWJS();" method="POST">

Dzięki temu cały JS wykona się nawet jeśli użytkownik wciśnie Enter zamiast klikać na przycisk.

0

Dzięki za pomoc. Tak juz tez próbowałem i też nie działa. Rozwiązałem to na około zrobiłem zwykły przycisk type = button i wywołanie funkcji js gdzie doczytuje sobie dane z formularza i wywołuje funkcje setinterval po czym Ajaxem wykonuje skrypt php.

Pozdrawiam!

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