我从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的值传递出去(已在顶部声明),然后将其插入页面中被注释掉的最后一块代码中-但这没有也不行。
我要去哪里错了?