Проблема с областью при вставке результатов вызова ajax в код страницы - PullRequest
0 голосов
/ 24 июня 2019

У меня есть данные, возвращенные из вызова 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 (объявив его сверху) и вставить его на страницу в последнем закомментированном блоке кода - но это не тоже не работает.

Куда я иду не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...