Я прочитал пару других потоков на этом, но, похоже, не может понять его. Я не очень много знаю о Javascript и до сих пор догадывался о моем пути. У меня есть одна функция, запускающая запрос AJAX для получения некоторых строк из базы данных. Затем для каждой строки мне нужно запустить вложенный запрос AJAX и вернуть его значения первой функции. Оба запроса AJAX работают независимо, но я не знаю, как правильно их вложить. Вот что у меня есть:Javascript вложенные запросы AJAX
function updateSummaryVariablesInput(typeId) {
if (typeId=='') {
document.getElementById('summaryVariables').innerHTML='';
return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp2=new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp2=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp2.onreadystatechange=function() {
if (xmlhttp2.readyState==4 && xmlhttp2.status==200) {
xmlDoc=xmlhttp2.responseXML;
txt='<table>';
x=xmlDoc.getElementsByTagName('row');
for (i=0;i<x.length;i++) {
if (x[i].getElementsByTagName('common')[0].childNodes[0].nodeValue < 1) {
txt=txt + '<tr><th style=\"width: 150px;\">' + x[i].getElementsByTagName('label')[0].childNodes[0].nodeValue + '</th><td>';
// Select
if (x[i].getElementsByTagName('input')[0].childNodes[0].nodeValue == 'select') {
txt=txt + '<select name=\"' + x[i].getElementsByTagName('title')[0].childNodes[0].nodeValue + '\"><option></option>';
myoptions = getSummaryVariableOptions(x[i].getElementsByTagName('id')[0].childNodes[0].nodeValue);
//alert(myoptions.length);
for (j=0;j<myoptions.length;j++) {
txt=txt + '<option value=\"' + myoptions[j] + '\">' + myoptions[j] + '</option>';
}
txt=txt + '</select>';
}
// Text
if (x[i].getElementsByTagName('input')[0].childNodes[0].nodeValue == 'text') {
txt=txt + '<input type=\"text\" name=\"' + x[i].getElementsByTagName('title')[0].childNodes[0].nodeValue + '\" />';
}
txt=txt + '</td></tr>';
}
}
txt=txt + '</table>';
document.getElementById('summaryVariables').innerHTML=txt;
}
}
xmlhttp2.open('GET','/cgi/new/Ajax/getOutageVariablesByTypeId.php?typeId='+typeId,true);
xmlhttp2.send();
}
function getSummaryVariableOptions(variableId) {
var options = new Array();
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp3=new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp3=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp3.onreadystatechange=function() {
if (xmlhttp3.readyState==4 && xmlhttp3.status==200) {
xmlDoc=xmlhttp3.responseXML;
x=xmlDoc.getElementsByTagName('row');
for (i=0;i<x.length;i++) {
options[i] = x[i].getElementsByTagName('description')[0].childNodes[0].nodeValue;
}
alert(options.length);
}
}
xmlhttp3.open('GET','/cgi/new/Ajax/getOutageVariableOptionsByVariableId.php?variableId='+variableId,true);
xmlhttp3.send();
//alert(options.length);
return options;
}
Запуск как есть, я получу предупреждение с действительным номером, например. 5. Если я раскомментирую любую из других функций предупреждения, они будут только выводить 0.
нативный код JavaScript для работы с AJAX делает мои глаза кровоточат :( – Alnitak
Согласовано! Есть ли какой-то другой способ, которым я мог бы делать это? Это PHP генерируется HTML формы, и мне нужно определенные части формы изменяться в зависимости на других опциях, выбранных в форме. – Matt
Большинство людей обычно обрабатывают ajax, используя фреймворк, наиболее популярный jQuery. См. http://api.jquery.com/jQuery.ajax/ –