将Ajax调用的结果插入页面代码时的范围问题

时间:2019-06-24 17:21:30

标签: ajax scope prototypejs

我从Ajax调用返回了数据,但是需要将变量传递到Ajax onSuccess函数中或从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的值传递出去(已在顶部声明),然后将其插入页面中被注释掉的最后一块代码中-但这没有也不行。

我要去哪里错了?

0 个答案:

没有答案