Запросы AJAX являются асинхронными. У вас не может быть пицца до ее выпечки. В реальной жизни вы называете компанию пиццы. Они выпекают его, и вы ждете. AJAX - то же самое. Поэтому установка returndata
не будет делать это сама по себе.
function fn() {
var xmlhttp = new XMLHttpRequest();
var vars = "request=something";
xmlhttp.open("POST", "script.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var returndata = xmlhttp.responseText;
}
}
xmlhttp.send(vars);
}
Функция readystate не существует ни для чего. Он ждет, пока запрос не будет обработан. Оттуда вы можете продолжать. Каждая функция/сценарий, зависящий от возвращаемых данных, должна быть вызвана из этой функции.
Тем не менее вы можете сделать это:
var returndata; //this will now be a global variable.
function fn() {
var xmlhttp = new XMLHttpRequest();
var vars = "request=something";
xmlhttp.open("POST", "script.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var returndata = xmlhttp.responseText;
doSomeThing(); //fire depended value.
}
}
xmlhttp.send(vars);
}
function doSomething()
{
if(returndata)
{
//do Something
}
else
{
alert("Data isn't loaded yet");
}
}
Читайте о [JS] прицелы (http://www.w3schools.com/js/js_scope.asp) – suvroc