vd
Новичок
AJAX: как заставить код "подождать" пока вернется и обработается результат?
Столкнулся с проблемой, как я понимаю, связанной со спецификой AJAX:
Есть три функции:
Первая вызывается извне и ДОЛЖНА вернуть результат выполнения.
По сути она вызывает стандартную функцию соедининия посредством AJAX, указывая в т.ч. и callback функцию:
Это собственно AJAX connector, стандартный, почти, но только еще передает данные через POST:
Это собственно callback функция. Вызывается после получения данных с сервера.
И формирует некоторый массив результатов spellResult, который должна вернуть первая функция
Суть вопроса в том, что код продолжает выполняться, пока данные еще не вернулись и первая функция генерирует ошибку, т.к. натыкается на spellResult, которого еще нет.
Уверен, что не первый столкнулся с подобной проблемой, буду благодарен за информацию или ссылки на таковую.
Столкнулся с проблемой, как я понимаю, связанной со спецификой AJAX:
Есть три функции:
Первая вызывается извне и ДОЛЖНА вернуть результат выполнения.
По сути она вызывает стандартную функцию соедининия посредством AJAX, указывая в т.ч. и callback функцию:
Код:
function spellCheck() {
var strWordList = wordList.join(",");
var postData = "wordlist="+encodeURIComponent(strWordList);
var url = "/admin/spell/spell_checking.php?Lang="+Lang;
var callBackFunction = "spellResultHandle";
ajaxConnect(url, postData, callBackFunction);
return spellResult;
}
Код:
function ajaxConnect(url, postData, callBackFunction) {
var xmlObj = new Object();
if (window.XMLHttpRequest) {
xmlObj = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
alert("Error initializing XMLHttpRequest");
return;
}
xmlObj.onreadystatechange = function(){
if(xmlObj.readyState == 4){
if (xmlObj.status == 200) {
var elArr = xmlObj.responseXML.getElementsByTagName('root')[0].childNodes;
if (callBackFunction != "") {
eval(callBackFunction+"(elArr);");
} else {
return true;
}
} else {
alert("There was a problem retrieving the XML data");
return false;
}
}
}
xmlObj.open("POST",url,true);
xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlObj.send(postData);
}
И формирует некоторый массив результатов spellResult, который должна вернуть первая функция
Код:
function spellResultHandle (elArr) {
elCount = elArr.length;
spellResult = new Array();
for (var i=0; i<elCount; i++) {
var el = new Array();
var ind = elArr[i].childNodes[0].firstChild.data;
el.word = wordList[ind];
el.obj = findObjLink(ind);
if (elArr[i].childNodes[1].firstChild.data=='none') {
el.suggestions = new Array();
} else {
el.suggestions = elArr[i].childNodes[1].firstChild.data.split(",");
}
spellResult.push(el);
}
wordList = null;
nodesMap = null;
}
Уверен, что не первый столкнулся с подобной проблемой, буду благодарен за информацию или ссылки на таковую.