AJAX 2x aanroepen op een pagina

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Adriaan

Adriaan

28/03/2009 19:15:00
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo date("r");
?>


ajax_request2.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo date("s");
?>


ajax_view.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


ajax.js
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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;
}
Gewijzigd op 01/01/1970 01:00:00 door Adriaan
 
PHP hulp

PHP hulp

19/05/2024 08:36:05
 
Rene Sn

Rene Sn

28/03/2009 20:42:00
Quote Anchor link
@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é
 
Adriaan

Adriaan

28/03/2009 23:07:00
Quote Anchor link
helaas is dat niet de oplossing
 
Willem Jan Z

Willem Jan Z

28/03/2009 23:15:00
Quote Anchor link
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
 
Rene Sn

Rene Sn

29/03/2009 06:06:00
Quote Anchor link
@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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
/* 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();
}


new_ajax.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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

<!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
 
Adriaan

Adriaan

29/03/2009 17:03:00
Quote Anchor link
@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
 
Rene Sn

Rene Sn

29/03/2009 17:23:00
Quote Anchor link
Adriaan schreef op 29.03.2009 17:03:
@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é
 
Adriaan

Adriaan

29/03/2009 17:49:00
Quote Anchor link
kheb het ook even online gezet op m'n website. http://www.adriaanvanrossum.nl/script/search/default%20ajax%20script
 
Rene Sn

Rene Sn

29/03/2009 18:04:00
Quote Anchor link
@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é
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.