returning xmlhttp responseText from function as return [duplicate] returning xmlhttp responseText from function as return [duplicate] ajax ajax

returning xmlhttp responseText from function as return [duplicate]


You can't.

Neither runs the code syncronous, nor would you return anything to loadXMLDoc but to the anonymous function which is the onreadystatechange handler.

Your best shot is to pass a callback function.

function loadXMLDoc(myurl, cb) {   // Fallback to Microsoft.XMLHTTP if XMLHttpRequest does not exist.   var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));    xhr.onreadystatechange = function()    {        if (xhr.readyState == 4 && xhr.status == 200)        {            if (typeof cb === 'function') cb(xhr.responseText);        }    }   xhr.open("GET", myurl, true);   xhr.send();}

And then call it like

loadXMLDoc('/foobar.php', function(responseText) {    // do something with the responseText here});


Just return the responseText property or assign its value to a variable in closure.

Returning a value:

<script>    function loadXMLDoc(myurl) {        var xmlhttp;        if (window.XMLHttpRequest) {            xmlhttp = new XMLHttpRequest();        } else {            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");        }        xmlhttp.onreadystatechange = function () {            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {                return xmlhttp.responseText;            }        }        xmlhttp.open("GET", myurl, true);        xmlhttp.send();        return xmlhttp.onreadystatechange();    }</script>

Using a closure:

<script>    var myValue = "",        loadXMLDoc = function (myurl) {            var xmlhttp;            if (window.XMLHttpRequest) {                xmlhttp = new XMLHttpRequest();            } else {                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");            }            xmlhttp.onreadystatechange = function () {                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {                    return xmlhttp.responseText;                }            }            xmlhttp.open("GET", myurl, true);            xmlhttp.send();            myValue = xmlhttp.onreadystatechange();        };</script>