AJAX update 2+ divjes vanuit externe .php's zonder reload

Pagina: 1
Acties:

  • haling
  • Registratie: Mei 2003
  • Laatst online: 16-02 10:57
Hallee!

Welkom bij mijn eerste AJAX probeersel! Ik probeer meerdere divjes te updaten vanuit een .php pagina. Dit werkt goed, totdat de updates elkaar in de weg gaan zitten, dan stop het script met updaten.

Het javascript/ajax gedeelte (ajax_test.php)
code:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>AJAX test page</title>
<style type="text/css">
body { font-family: verdana; font-size: 8pt; }
</style>
<script type="text/javascript">
function createRequestObject() {
    var req;
    if(window.XMLHttpRequest){
    // Firefox, Safari, Opera...
        req = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
    // Internet Explorer 5+
    req = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    // There is an error creating the object,
    // just as an old browser is being used.
        alert('There was a problem creating the XMLHttpRequest object');
    }
    return req;
}

function handleDivTag(divtag) {
    var divtag;
    return divtag;
}

function handleTimeOut(timeout) {
    var timeout;
    return timeout;
}

function handleRefresh(refresh) {
    var refresh;
    return refresh;
}

// Create the Divtag Handler -- Mainly an IE 6 Fix
var divhandler = new handleDivTag(null);
var timehandler = new handleTimeOut(null);
var refreshhandler = new handleRefresh(null);

function sendRequest(act,divtag,timeout,refresh) {
    // Make the XMLHttpRequest object
    http = createRequestObject();
    // Open PHP script for requests
    http.open('get', act);
    http.onreadystatechange = function() { handleResponse(http); };    
    // Open PHP script for requests
    divhandler.divtag = divtag;
    timehandler.timeout = timeout;
    refreshhandler.refresh = refresh;
    http.send(null);
}

function handleResponse(http) {
    if(http.readyState == 4 && http.status == 200) {
        // Text returned FROM PHP script
        var response = http.responseText;
        // document.write(http.responseText);
        if(response) {
            // UPDATE ajaxTest content
            document.getElementById(divhandler.divtag).innerHTML = response;
            setTimeout(timehandler.timeout,refreshhandler.refresh);
        }
    }
}
 
function div1() {sendRequest('page.php','div1',div1,1000); }
function div2() {sendRequest('page.php','div2',div2,1000); }
</script>
</head>
<body onload=''>
<b>div1</b><br>
<div id="div1"><?php include ("page.php") ?></div>
<br>
<b>div2</b><br>
<div id="div2"><?php include ("page.php") ?></div>
<br>
<a href="javascript:div1();">Start refreshing div1</a>
<a href="javascript:div2();">Start refreshing div2</a>
</body>
</html>


...en de inhoud (page.php)
code:
1
2
3
4
<?php
echo "System time: ".date("G:i:s",time());
//sleep (1);
?>


Dit werkt perfect totdat de updates botsen. Als je de 'sleep' uncomment dan kun je precies zien wat ik bedoel.

-tnx-

Harold.

Verwijderd

Ik kom er niet precies achter wat er mis gaat maar je gebruikt een globale variabele voor je request object. Die moet sowieso locaal zijn, anders overschrijft elke request de vorige.
JavaScript:
1
var http = createRequestObject();

  • haling
  • Registratie: Mei 2003
  • Laatst online: 16-02 10:57
Jij bedoeld:
code:
1
2
3
function sendRequest(act,divtag,timeout,refresh) {
    // Make the XMLHttpRequest object
    [b]var[/b] http = createRequestObject();


...dat maakt het juist erger...

De 2e div refreshed dan niet meer...

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Hetzelfde geldt ook voor je divhandler, timehandler en refreshhandler; allemaal global...

Intentionally left blank


  • haling
  • Registratie: Mei 2003
  • Laatst online: 16-02 10:57
Ik heb het al opgelost met prototype

DIt is een library met ook een ajax-refresh functie...