AJAX 2x aanroepen op een pagina
goedendag,
graag wil ik de functie 'runajax' gebruiken om meerder elementen op de website up-to-date te houden door middel van ajax. helaas werkt het niet als ik twee maal de functie 'runajax' aanroep. waarschijnlijk komt die omdat de functie eindigt met 'window.setTimeout(function(){runajax(page,element)}, 1000);'.
heeft iemand idee hoe ik dit op kan lossen?
alvast hartelijk bedankt!
adriaan
de files:
ajax_request.php
ajax_request2.php
ajax_view.php
ajax.js
graag wil ik de functie 'runajax' gebruiken om meerder elementen op de website up-to-date te houden door middel van ajax. helaas werkt het niet als ik twee maal de functie 'runajax' aanroep. waarschijnlijk komt die omdat de functie eindigt met 'window.setTimeout(function(){runajax(page,element)}, 1000);'.
heeft iemand idee hoe ik dit op kan lossen?
alvast hartelijk bedankt!
adriaan
de files:
ajax_request.php
ajax_request2.php
ajax_view.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML Basic 1.1//EN'
'http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='nl'>
<html>
<head>
<title></title>
<link rel='stylesheet' href='/common/style.css' type='text/css' />
<script src='ajax.js' type='text/javascript'></script>
<script type='text/javascript'>
window.onload = function() {
runajax('ajax_request.php', 'ajax_content');
runajax('ajax_request2.php', 'ajax_content2');
}
</script>
</head>
<body>
<div id='ajax_content'>date</div>
<hr />
<div id='ajax_content2'>seconden</div>
</body>
</html>
'http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='nl'>
<html>
<head>
<title></title>
<link rel='stylesheet' href='/common/style.css' type='text/css' />
<script src='ajax.js' type='text/javascript'></script>
<script type='text/javascript'>
window.onload = function() {
runajax('ajax_request.php', 'ajax_content');
runajax('ajax_request2.php', 'ajax_content2');
}
</script>
</head>
<body>
<div id='ajax_content'>date</div>
<hr />
<div id='ajax_content2'>seconden</div>
</body>
</html>
ajax.js
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var xmlHttp
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null) {
alert ("Your browser does not support AJAX!");
}
function runajax(page, element) {
xmlHttp.onreadystatechange=function(){
if (xmlHttp.readyState==4) {
document.getElementById(element).innerHTML=xmlHttp.responseText;
}
}
xmlHttp.open("GET",page+"?randomtime="+Math.random(),true);
xmlHttp.send(null);
window.setTimeout(function(){runajax(page,element)}, 1000);
}
function GetXmlHttpObject() {
var xmlHttp=null;
try {
xmlHttp=new XMLHttpRequest();
}
catch (e) {
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null) {
alert ("Your browser does not support AJAX!");
}
function runajax(page, element) {
xmlHttp.onreadystatechange=function(){
if (xmlHttp.readyState==4) {
document.getElementById(element).innerHTML=xmlHttp.responseText;
}
}
xmlHttp.open("GET",page+"?randomtime="+Math.random(),true);
xmlHttp.send(null);
window.setTimeout(function(){runajax(page,element)}, 1000);
}
function GetXmlHttpObject() {
var xmlHttp=null;
try {
xmlHttp=new XMLHttpRequest();
}
catch (e) {
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
Gewijzigd op 01/01/1970 01:00:00 door Adriaan
@adriaan,
verander in je ajax.js
regel 15 :
window.setTimeout(function(){runajax(page,element)}, 1000);
vervangen voor :
window.setTimeout("runajax('"+ page + "','"+ element+ "');",1000);
Groetjes,
René
verander in je ajax.js
regel 15 :
window.setTimeout(function(){runajax(page,element)}, 1000);
vervangen voor :
window.setTimeout("runajax('"+ page + "','"+ element+ "');",1000);
Groetjes,
René
helaas is dat niet de oplossing
Als ik het goed begrijp, ligt het inderdaad aan de setTimeout. Die wordt elke keer overschreven. Je kan hiervoor een soort wrapper gebruiken.
Ik raad je aan een Library te gebruiken, die hebben zulke dingen al helemaal ingebakken, scheelt je meestal een hoop tijd :)
Een paar libraries:
jQuery
Prototype
MooTools
YUI
Ik raad je aan een Library te gebruiken, die hebben zulke dingen al helemaal ingebakken, scheelt je meestal een hoop tijd :)
Een paar libraries:
jQuery
Prototype
MooTools
YUI
@Adriaan,
Ik had het zelfde probleem effe niet goed opgelet,
voor mezelf heb ik destijds xmlhttp gedeelte gecopieerd, in xhtml1 en 2.
Maar dat was best wel lelijk.
Heb er maar effe een objectje van gemaakt :) Was effe puzzelen. maar het werkt prima ;-)
new_ajax.js
new_ajax.php
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML Basic 1.1//EN' 'http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='nl'>
<html>
<head>
<title></title>
<link rel='stylesheet' href='/common/style.css' type='text/css' />
<script src='new_ajax.js' type='text/javascript'></script>
<script type='text/javascript'>
/*
per ajax die je gebruiken wilt (tegelijk) moet je een aanmaken.
*/
var ajax1 = new nAjax();
var ajax2 = new nAjax();
/* ------------ */
function do_update() {
ajax1.run('ajax_request.php', 'ajax_content');
ajax2.run('ajax_request2.php', 'ajax_content2');
window.setTimeout("do_update()",2000);
}
window.onload = do_update() ;
</script>
</head>
<body>
<div id='ajax_content'>date</div>
<hr />
<div id='ajax_content2'>seconden</div>
</body>
</html>
Heb 't hier Getest, en werkt prima :-)
EDIT: Effe een note.. Ik hoop dat je het op een prive server gebruikt, zodat je de logfunctie uit kunt zetten want als je dit remote doet en dan met 1000 msec, dan groeid je access.log als KOOL ;-) .. in een test opstelling had ik net 20 van die div's gemaakt. En ben effe 3 uurtjes weggeweest AHUM :P
GoodLuck...
René
Ik had het zelfde probleem effe niet goed opgelet,
voor mezelf heb ik destijds xmlhttp gedeelte gecopieerd, in xhtml1 en 2.
Maar dat was best wel lelijk.
Heb er maar effe een objectje van gemaakt :) Was effe puzzelen. maar het werkt prima ;-)
new_ajax.js
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* nAjax v0.01rs*/
/* Gebruik : var ajax1 = new new_Ajax();
/* ajax1.run("timer.php","id_naam"); */
function nAjax() {
this.xmlhttp = null;
this.element="";
this.page="";
var self="";
this.initnAjax=function() {
try {
this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
this.xmlhttp = null;
}
}
if (! this.xmlhttp) {
if (typeof XMLHttpRequest != "undefined") {
this.xmlhttp = new XMLHttpRequest();
} else {
this.failed = true;
}
}
};
this.run=function (page,element) {
self = this;
if (this.xmlhttp) {
if (self.xmlhttp.readyState >= 1 && self.xmlhttp.readyState <= 3) { self.xmlhttp.abort();}
this.now = new Date();
this.xmlhttp.open("GET", page + "?t=" + this.now.getTime(), true);
this.xmlhttp.onreadystatechange = function () {
if(self.xmlhttp.readyState == 4){
document.getElementById(element).innerHTML = self.xmlhttp.responseText;
}
}
this.xmlhttp.send(null);
}
}
this.initnAjax();
}
/* Gebruik : var ajax1 = new new_Ajax();
/* ajax1.run("timer.php","id_naam"); */
function nAjax() {
this.xmlhttp = null;
this.element="";
this.page="";
var self="";
this.initnAjax=function() {
try {
this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
this.xmlhttp = null;
}
}
if (! this.xmlhttp) {
if (typeof XMLHttpRequest != "undefined") {
this.xmlhttp = new XMLHttpRequest();
} else {
this.failed = true;
}
}
};
this.run=function (page,element) {
self = this;
if (this.xmlhttp) {
if (self.xmlhttp.readyState >= 1 && self.xmlhttp.readyState <= 3) { self.xmlhttp.abort();}
this.now = new Date();
this.xmlhttp.open("GET", page + "?t=" + this.now.getTime(), true);
this.xmlhttp.onreadystatechange = function () {
if(self.xmlhttp.readyState == 4){
document.getElementById(element).innerHTML = self.xmlhttp.responseText;
}
}
this.xmlhttp.send(null);
}
}
this.initnAjax();
}
new_ajax.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML Basic 1.1//EN' 'http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='nl'>
<html>
<head>
<title></title>
<link rel='stylesheet' href='/common/style.css' type='text/css' />
<script src='new_ajax.js' type='text/javascript'></script>
<script type='text/javascript'>
/*
per ajax die je gebruiken wilt (tegelijk) moet je een aanmaken.
*/
var ajax1 = new nAjax();
var ajax2 = new nAjax();
/* ------------ */
function do_update() {
ajax1.run('ajax_request.php', 'ajax_content');
ajax2.run('ajax_request2.php', 'ajax_content2');
window.setTimeout("do_update()",2000);
}
window.onload = do_update() ;
</script>
</head>
<body>
<div id='ajax_content'>date</div>
<hr />
<div id='ajax_content2'>seconden</div>
</body>
</html>
Heb 't hier Getest, en werkt prima :-)
EDIT: Effe een note.. Ik hoop dat je het op een prive server gebruikt, zodat je de logfunctie uit kunt zetten want als je dit remote doet en dan met 1000 msec, dan groeid je access.log als KOOL ;-) .. in een test opstelling had ik net 20 van die div's gemaakt. En ben effe 3 uurtjes weggeweest AHUM :P
GoodLuck...
René
Gewijzigd op 01/01/1970 01:00:00 door Rene Sn
@rené: thanx, het werkt perfect! en idd, die access.log groeit als kool, hij is 17mb :p zelfs m'n editor heeft moeite zulke bestanden te showen. misschien de access.log wat vaker legen of gewoon uitzetten.
bedankt voor de moeite!
groetjes,
adriaan
bedankt voor de moeite!
groetjes,
adriaan
'Adriaan:
@rené: thanx, het werkt perfect! en idd, die access.log groeit als kool, hij is 17mb :p zelfs m'n editor heeft moeite zulke bestanden te showen. misschien de access.log wat vaker legen of gewoon uitzetten.
Your Welcome, Ik heb nu meteen dat verhaal bij me eigen ook toegepast, Scheelt een stuk rommelige java.js :)
xhtml1,xhtml2,xhtml3,xhtml4...... + aanverwante functions's :)
Gebruik notepad++ , werkt prima :) mijn access.log is gemiddeld 400mb ofzo :D
Maar goed ben blij dat 't werkt :-)
Grts. René
kheb het ook even online gezet op m'n website. http://www.adriaanvanrossum.nl/script/search/default%20ajax%20script
@Adriaan,
Leuk :-) ... Leuke site trouwens, (je hebt wel wat javaErrors')
Dat met die postcode is ook leuk :-) ben ooit eens begonnen om van een telefoonboek alle adressen te exporteren pffffffff :P
zo'n dbase met al die postcode/adres/woonplaats wil ik nog hebben :)
dump um maar niet hier da's beetje groot...
Grts. René
Leuk :-) ... Leuke site trouwens, (je hebt wel wat javaErrors')
Dat met die postcode is ook leuk :-) ben ooit eens begonnen om van een telefoonboek alle adressen te exporteren pffffffff :P
zo'n dbase met al die postcode/adres/woonplaats wil ik nog hebben :)
dump um maar niet hier da's beetje groot...
Grts. René




