javascriptjqueryxmlhttprequesthttprequestonreadystatechange

how can I use readyonstatechange function to return data


I want to use javascript request xmlhttp to trigger java action so I used the following function as function call and return data, but can't return response cause I write return statement in other inner function like that.

function loadXMLDoc(action,request)
{
var act = action+".action"+request;
console.log("load action");
var xmlhttp;
if (window.XMLHttpRequest)
     {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
     }
     else
  {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        return JSON.parse(xmlhttp.responseText);            

    }
    else{

    }
  };

  xmlhttp.open("GET",act,true);
  xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  xmlhttp.send();

}

caller function......

var data = loadXMLDoc("load","?reuqest=request");

where should I write return and how could I access returned data ?


Solution

  • Change your method to take a callback:

    function loadXMLDoc(action,request, callback)
    

    Pass a callback to your loadXMLDoc as in

    loadXMLDoc("load","?reuqest=request", function(data) {
      console.log(data);
    });
    

    and call the callback in your success:

    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        callback(xmlhttp.responseText);            
    }