Javascript+php+mysql "timeout" vraagje
Ik heb een tekst input vak op mijn website, zonder knop.
Bij dit tekstvak gebruik ik "onkeyup".
Dit werkt allemaal prima.
Het probleem is, dat mijn database uit ruim 80000 rijen bestaat, deze tabel wordt dus elke keer als er een knop wordt ingedrukt doorzocht.
Dit is een heel grote belasting van de server. Ik heb al een Limit op de query gezet.
Echter ik heb nog een oplossing in gedachten, alleen geen idee hoe ik dit moet doen, ik ben namelijk nog redelijk nieuw op dit gebied.
Ik wil in de javascript functie die wordt aangeroepen door onkeyup een soort van timeout inbouwen.
Dit houdt in, elke keer als de functie wordt aangeroepen wordt er een bepaalde tijd gewacht, voordat de functie verder wordt uitgevoerd (en dus ook de query). Als in deze wachttijd de functie nog een keer wordt aangeroepen, moet de functie weer van voor af aan beginnen enz.
Iemand een idee hoe ik dit kan oplossen in javascript? of desnoods in de php pagina met de zoek query?
Gewijzigd op 01/01/1970 01:00:00 door Ron -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript">
<!--
// Global timer
var tTimer;
function startCounting()
{
window.clearTimeout(tTimer);
tTimer = window.setTimeout(function(){alert('counting finished!'); }, 1000);
}
// -->
</script>
<!--
// Global timer
var tTimer;
function startCounting()
{
window.clearTimeout(tTimer);
tTimer = window.setTimeout(function(){alert('counting finished!'); }, 1000);
}
// -->
</script>
Zo wordt de timeout steeds overschreden. Let wel op dat tTimer buiten de functie staat anders werkt het niet.
ik had ook al zo'n timer gebruikt, maar dan in dezelfde functie als waar de php pagina werd aangeroepen, dat werkte natuurlijk niet
Edit:
na het testen, blijkt het echter niet te werken! ik snap niet hoe het kan.
ik roep de functie zo aan: onkeyup="startCounting()"
ik heb nu even een groot delay genomen om het goed te kunnen testen, echter de php pagina wordt al direct aangeroepen
(getest in Firefoz 3.5.3)
in IE 8 wordt zelfs een Error gegeven, en wel in de regel van tTimer = .... karakter 5
de functie heb ik in de pagina javascript.js staan, die ik zo include:
<script type="text/javascript" src="javascript.js"></script>
mis ik iets?
na het testen, blijkt het echter niet te werken! ik snap niet hoe het kan.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
var tTimer;
function startCounting()
{
window.clearTimeout(tTimer);
tTimer = window.setTimeout(test(), 1000000);
}
function startCounting()
{
window.clearTimeout(tTimer);
tTimer = window.setTimeout(test(), 1000000);
}
ik roep de functie zo aan: onkeyup="startCounting()"
ik heb nu even een groot delay genomen om het goed te kunnen testen, echter de php pagina wordt al direct aangeroepen
(getest in Firefoz 3.5.3)
in IE 8 wordt zelfs een Error gegeven, en wel in de regel van tTimer = .... karakter 5
de functie heb ik in de pagina javascript.js staan, die ik zo include:
<script type="text/javascript" src="javascript.js"></script>
mis ik iets?
Gewijzigd op 01/01/1970 01:00:00 door Ron -
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
// Met een string
var tTimer = window.setTimeout('test()', 5000);
// Of in een andere functie verpakt
var tTimer = window.setTimeout(
// Let op: deze functie hoeft geen naam te hebben
function (){
test();
}, 5000);
var tTimer = window.setTimeout('test()', 5000);
// Of in een andere functie verpakt
var tTimer = window.setTimeout(
// Let op: deze functie hoeft geen naam te hebben
function (){
test();
}, 5000);
Succes ermee!
Dat was ik inderdaad vergeten.
Nu werkt het naar behoren! :)
Topic closed!
laat je hem na 1000 records flushen ?
MikeY schreef op 15.10.2009 23:32:
waarom gebruik je niet ajax, met php output buffering ?
laat je hem na 1000 records flushen ?
laat je hem na 1000 records flushen ?
Kun je me misschien meer uitleg geven?
Ik snap niet wat je bedoelt.
Ik gebruik nu de SACK library om de php pagina aan te roepen: http://twilightuniverse.com/resources/code/sack/