Siemka! Chciałbym opóźnić wykonanie zapytania mysql o jakies 5-10 sekund! Mam pytanko jak można by to zrobic czego szukać konkretnie na necie przejrzałem już o Xajaxie i Ajaxie ale czegos takiego nie znalazłem prosze o pomoc
Niemozliwe, abys nie znalazl nieczego o ajax'ie.
Poza tym, niepodales jezyka.
Php, tak?
Nie no znalazłem o Ajaxie ale jak wykonać w nim zapytanie mysql_query to nie wiem
Tak pisze normalną stonkę w php i chciałbym dołożyć wykonanie operacji po jakimś czasie bez przeładowania strony
To nie dziala tak latwo, jak Ci sie wydaje.
Uzywayjac jQuery mozna zrobic to tak:
function DoIt()
{
$.get("http://mojastrona.pl/zapytanie.php", function(data)
{
$("moj_div").html(data)
});
}
$(document).ready(function()
{
setInterval(5000, DoIt)
});
Np.takie cos.
W pliku php moze byc:
<?php
include("main.php")
ConnectToDB()
$Zapytanie = MySQL_Query("...")
print $Zapytanie
?>
Oczywiscie - mozna je jakos sformatowac, pododawac jakies bajery, jednak ogolnie, to mniej-wiecej tak wyglada.
Ale to wszystko znalazlbys w pierwszym-lepszym tutorialu...
PS: Jezeli beda bledy, to przepraszam, ale nie mam czasu sprawdzac kodu ;)
Nie ma jakiejś prostszej metody? Zrobiłem sobie już ładny odliczacz i tylko zostało mi opóźnienie :) myślałem że zwykłym sleepem się da to załatwić
Przeczytaj jakies kursy o jQuery, ogolnie o Ajax'ie, a poznasz swoja odpowiedz.
PS: Jezeli kod ma sie wykonac 1 raz, a nie w nieskonczonosc (tak jak u mnie), to zamien setInterval na setTimeout
<script type="text/javascript">
function showUser(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
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("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","podstrona.php?zmienna="+str,true);
xmlhttp.send();
}
</script>
mam coś takiegotylko mam pytanie czy muszę coś zaimportować zeby to działało w sekcji head? uruchamiam to w body onload a jak mozna by to opóźnić?
1.Trzeba było użyć jQuery, ale skoro chcesz się tak męczyć z tym...
2.Nic nie musisz dodawać do kodu (jeszcze).
3:
setTimeout(milisekundy, funkcja)
-> pojedyncze wywołanie kodu po 'milisekundy' (przerwa, wywołanie funkcji)
setInterval(milisekundy, funkcja)
-> ciągłe wywoływanie kodu z przerwą 'milisekundy' (wywołanie funkcji, przerwa, wywołanie funkcji, przerwa, itd.)
Czyli w twoim przypadku będzie to tak:
<script>
(tutaj twoja funkcja)
setTimeout(5000, "showUser(tutaj nie wiem, co wpisać)")
</script>
1 sekunda = 1000 milisekund
PS: Tego twojego kodu nie sprawdzałem, ponieważ tak 'bezpośrednio'(jeżeli można to tak nazwać) Ajax'a nie kojarzę, zawsze korzystam z frameworków ;)
Teraz mam taki problemmam tam ten swój plik ktory się ma wykonać po 5 sekundach jak wywołuję go z przeglądarki to wszystko działa a jak z tej podstrony co bym chciał to już nie za bardzo getem pobieram wszystko normalnie przekazuję ale nic to nie daje
Pokaż, jaki kod masz aktualnie.
Bo wywołuję to tak?
<body onload="showUser('.$_GET['user'].');"> Sry że tak trujęTrochę źle.
Spróbuj tak:
echo "<body onload ='showUser(\"".$_GET['user']."\");'>"
W przeglądarce będzie to wyglądać tak (przyjmując, że $_GET['user'] = "admin")
<body onload='showuser("admin");'></body>
Czyli OK.
Spróbuj tak ;)
<script type="text/javascript">
function showUser(str)
{
if (str=="")
{
document.getElementById("link").innerHTML="";
return;
}
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("link").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","strona.php?user="+str,true);
xmlhttp.send();
}
setTimeout(5000, "showUser($_GET['user']));
</script>
wywołuję tak jak wyżej
<body onload="showUser('.$_GET['user'].');">i w tym pliiku strona.php mam coś takiego
<?php
require "connection.php";
connection();
$user = $_GET['user'];
$sql="Moje zapytanie";
$result = mysql_query($sql);
echo "Zapytanie wykonano";
?>
tak jak mówię jak z ręki wywołuje to stronę to do bazy sie wszystko wrzuca tak jak należy
Działa to w body miałem źle wielkie dzięki Ci dobry człowieku!
Tylko teraz nie działa opóźnienie
setTimeout(9000, "showUser(str)");
coś takiego ma być dokładnie
A gdzie masz zadeklarowaną zmienną str
?
function showUser(str) to nie o to chodzi?
Ach...
function showUser(str)
Oznacza, że funkcja showUser
wymaga podania parametru 'str'
Jeżeli wywołasz:
setInterval(9000, "showUser(str)")
Będzie to oznaczać, że przeglądarka ma znaleźć zmienną "str", a przecież takowa nie istnieje.
function showUser(str)
Jest parametrem, a nie zmienną (niby podobne, a jednak inne)
To tak, jakbyś chciał wywołać strona.php?user=
Ponieważ zmienna str
nie istnieje jest ona zastępowana albo pustym ciągiem znaków, albo dana część kodu się nie wykonuje.
Zobacz log JavaScript'u (zależy od przeglądarki, gdzie on jest), a zobaczysz tam błędy i parę innych przydatnych rzeczy.
Ogólnie polecam przeczytać tutoriale o JS'ie.
setTimeout(9000, "showUser($_GET['user'])");
ale takie coś nie śmiga a taki chciałem przyjąć parametr wywołania
Proszę:
<?php
echo "
<script> (skrypt)
setTimeout(9000, \"showUser('".$_GET['user']."')\");
</script>";
?>
Powinno być OK.
Co maszna mysli pisząc (skrypt)
ja mam tą funkcję showUser w head a to wywołuję gdzieś dalej tak
Tak, w miejsce (skrypt)
dajesz swoją procedurę, lecz ja ten kod PHP dałem tylko tak poglądowo.
Cały czas mam to odpalac w body normalnie tak?
Oczywiście, lecz trochę po zmianie:
<head>
<script>
(tutaj funkcja showUser)
function Wykonaj()
{
setTimeout(9000, \"showUser('".$_GET['user']."')\");
}
</script>
</head>
<body onload="Wykonaj()">
(dalsza część dokumentu)
Powinno być dobrze ;)
<script type="text/javascript">
function showUser(str)
{
if (str=="")
{
document.getElementById("link").innerHTML="";
return;
}
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("link").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","pkt.php?user="+str,true);
xmlhttp.send();
}
function Wykonaj()
{
setTimeout(5000, "\showUser('<?php echo $_GET['user'];?>')\");
}
</script>
i wywołanie
<body onload="Wykonaj()";>
i ciągle nic
w sensie że się ta funkcja nie wykonuje
<body onload="Wykonaj();">
Miałeś średnik w złym miejscu.
Nic to nie daje czy tu na pewno jest wszystko ok?
setTimeout(5000, "\showUser('<?php echo $_GET['user'];?>')\");
Hm...
setTimeout(5000, "showUser('".$_GET['user']."')");
I tak bez żadnego <?php ?> jak ma sobie tego geta pobrać?