Javascript+php+mysql "timeout" vraagje
Ik heb een zoekfunctie gemaakt mbv javascript, php en mysql.
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?
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 -
Je kan gewoon de timeouts in JS gebruiken.
Zo wordt de timeout steeds overschreden. Let wel op dat tTimer buiten de functie staat anders werkt het niet.
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.
bedankt! zo kan het idd!
ik had ook al zo'n timer gebruikt, maar dan in dezelfde functie als waar de php pagina werd aangeroepen, dat werkte natuurlijk 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 -
In setTimeout worden functies doorgegeven als string of in een functie "verpakt".
Succes ermee!
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!
Super, bedankt!
Dat was ik inderdaad vergeten.
Nu werkt het naar behoren! :)
Topic closed!
Dat was ik inderdaad vergeten.
Nu werkt het naar behoren! :)
Topic closed!
waarom gebruik je niet ajax, met php output buffering ?
laat je hem na 1000 records flushen ?
laat je hem na 1000 records flushen ?
'MikeY:
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/




