AJAX race conditions

    Date: 02/15/06 (Javascript Community)    Keywords: xml

    This looks so stupidly simple, but I can't figure it out and it's really holding me up.

    Using XMLHttpRequest I can make a function to process the contents of another file, but I can't find a way to make a function to return the contents of another file.

    For example, this works:
    var xmlhttp;
    
    function getFile() {
    	if (xmlhttp) {
    		xmlhttp.open("POST", "file.txt",true);
    		xmlhttp.onreadystatechange=function() {
    			if (xmlhttp.readyState==4) {
    				alert(xmlhttp.responseText);
    			}
    		}
    	}
    }
    
    window.addEventListener('load',function(ev) {
    	try {
    		xmlhttp = new XMLHttpRequest();
    	} catch (e) {
    		xmlhttp=false;
    	}
    	getFile();
    }, false);
    whereas this wont:
    var xmlhttp;
    
    function getFile() {
    	var response = "no data";
    	
    	if (xmlhttp) {
    		xmlhttp.open("POST", "file.txt",true);
    		xmlhttp.onreadystatechange=function() {
    			if (xmlhttp.readyState==4) {
    				response = xmlhttp.responseText;
    			}
    		}
    	}
    	
    	return response;
    }
    
    window.addEventListener('load',function(ev){
    	try {
    		xmlhttp = new XMLHttpRequest();
    	} catch (e) {
    		xmlhttp=false;
    	}
    	
    	alert(getFile());
    	
    }, false);

    It's obviously a race condition - as XMLHttpRequest runs as a seperate thread the getFile() function is exiting before the inner function has completed and will always return "no data".

    Problem is, I can't think of a way to work around it. Can anyone help me out? I'm sure this must be a reasonably common problem.

    Source: http://community.livejournal.com/javascript/93361.html

« Javascript Novice... || Newbie has problems with... »


antivirus | apache | asp | blogging | browser | bugtracking | cms | crm | css | database | ebay | ecommerce | google | hosting | html | java | jsp | linux | microsoft | mysql | offshore | offshoring | oscommerce | php | postgresql | programming | rss | security | seo | shopping | software | spam | spyware | sql | technology | templates | tracker | virus | web | xml | yahoo | home