У меня есть данные, возвращенные из вызова Ajax, но мне нужно передать переменные в функцию Ajax onSuccess или из нее, чтобы вставить результаты на мою страницу. Я почти уверен, что это проблема масштаба.
Вчера я разместил здесь сложный вопрос, в основном об Ajax-части, и эта часть сейчас работает - я правильно возвращаю результаты. Я мог бы вставить его в код моей страницы двумя способами, но один из них заключается в получении значения переменной из функции onSuccess; другой должен получить значение переменной в нем! Я не могу заставить кого-либо из них работать. Вот урезанная версия кода:
var base = 'http://10.0.1.2:90/~dvds/';
// initialization routines
document.observe ('dom:loaded', function() {
// set up handler for variable numbers of selects
var addselects = $$('.addselect');
for (var i = 0; i < addselects.length; i++) {
var addselect = addselects[i];
addselect.onchange = newSelect;
}
});
// handler for adding new field to array
function newSelect() {
var thisid = this.id;
var newhtml;
var url = base + 'ajaxtest';
// send request to do the business
var myAjax = new Ajax.Request (url, {
method: 'post',
onSuccess: function (req) {
var xml = req.responseXML;
var id = xml.getElementsByTagName('id')[0].firstChild.nodeValue;
if (id) {
newhtml = '\t\t<li>\r\t\t\t<select class="addselect" name="newlist" id="newlist" />\r\t\t\t\t<option value="" selected="selected"></option>\r';
// loop
var newid, newname;
var ids = xml.getElementsByTagName('id');
var names = xml.getElementsByTagName('name');
for (var i = 0; i < ids.length; i++) {
newid = ids[i].firstChild.nodeValue;
newname = names[i].firstChild.nodeValue;
newhtml += '\t\t\t\t<option value="' + newid + '">' + newname + '</option>\r';
}
newhtml += '\t\t\t</select>\r\t\t</li>\r';
// alert (thisid);
$('thisid').up('ul').insert (newhtml);
}
else {
alert (’ng');
newhtml = '<li>No good.</li>';
}
},
onFailure: function() {
alert ('Script failure.');
newhtml = '<li>No good.</li>';
}
});
// alert (newhtml);
// if (newhtml) {
// this.up('ul').insert (newhtml);
// }
}
Установив переменную thisid как this.id, я не понимаю, почему $ ('thisid') не работает в строке $ ('thisid'). Up ('ul'). Insert (newhtml) ; - тем более что значение thisid правильно отображается в предупреждении, которое я вставил для тестирования (закомментировано). Почему это? Если вместо этого я добавлю newhtml в это оповещение, это тоже правильно.
И учитывая, что это, похоже, не работает, я попробовал альтернативу передать значение newhtml (объявив его сверху) и вставить его на страницу в последнем закомментированном блоке кода - но это не тоже не работает.
Куда я иду не так?