Jump to content


Photo

Problem with AJAX & recursion


  • Please log in to reply
1 reply to this topic

#1 tapewormbyte

tapewormbyte
  • New Members
  • Pip
  • Newbie
  • 3 posts

Posted 22 October 2006 - 09:09 PM

I'm trying to update mutiple div's, depending whether or not new content is available for them. I can get one div to update perfectly fine, but as soon as I add recursive-requests stuff starts messing up in that div's will blank out with no content at all, or with the wrong content (as if they're intercepting each other). Is there a way around this?

This is my js:
function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == 'Microsoft Internet Explorer') {
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        ro = new XMLHttpRequest();
    }
    return ro;
}

var http = createRequestObject();

function sndReq(timestamp, action) {
    http.open('get', 'terminal.php?t='+timestamp+'&action='+action+'&nocache='+Date());
    http.onreadystatechange = function(){handleResponse(action);}
    http.send(null);
}

function handleResponse(action) {
    if(http.readyState == 4) {
        var response = http.responseText;
        switch(action) {
            case 'updateTimer':
                if(response != timestamp) {
                    timestamp = response;
                }
                sndReq(timestamp, 'usersonline');
            break
            
            case 'usersonline':
                if(response != document.getElementById(action).innerHTML) {
                    document.getElementById(action).innerHTML = response;
                }
                // un-commenting the following line is where problems occur
                //sndReq(timestamp, 'calendar');
            break
            
            case 'calendar':
                if(response != 'noupdate') {
                    document.getElementById(action).innerHTML = response;
                }
            break
        }
    }
}

var timestamp = '<?php echo time(); ?>';
setInterval("sndReq(timestamp, 'updateTimer')", 30000);

And this is my PHP:
<?php

require_once('../offline/functions.php');
session_start();

if(isset($_REQUEST['t'], $_REQUEST['action'])) {
    $timestamp = ctype_digit($_REQUEST['t']) ? $_REQUEST['t'] : time();
    switch($_REQUEST['action']) {
        case 'updateTimer':
            echo time();
        break;
        
        case 'usersonline':
            $result = db_query("SELECT count(*) FROM icv_sessions WHERE valid = 'Y'");
            $online = $result[0][0] <= 1 ? 'there is currently 1 active session' : 'there are currently '.$result[0][0].' active sessions';
            $online .= ' :: <b>'.date("n.j.y.B", $_REQUEST['t']).'</b>&nbsp;';
            echo $online;
        break;
        
        case 'calendar':
            $result = db_query("SELECT UNIX_TIMESTAMP(create_ts) FROM icv_threads ORDER BY create_ts DESC LIMIT 1");
            $lastThread = $result[0][0];
            if($lastThread >= ($timestamp - 60)) {
                $dateArray = setup_calendar();
                echo build_calendar($dateArray['month'], $dateArray['year'], $dateArray['dates']);
            } else {
                echo 'noupdate';
            }
        break;
    }
    exit();
}

?>


#2 ober

ober
  • Staff Alumni
  • Advanced Member
  • 5,337 posts
  • LocationEast Coast, USA

Posted 23 October 2006 - 12:21 AM

If you're resending the same request, you'll have to either create a second HTTPREQUEST object or wait longer to go back for the second set of data.

Info: PHP Manual





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users