Jump to content

Problem with AJAX & recursion


tapewormbyte

Recommended Posts

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:
[code]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);[/code]

And this is my PHP:
[code]<?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();
}

?>[/code]
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.