ajax - 将ajax调用的结果插入页面代码时的范围问题
问题描述
我有从 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 的值传递出去(已在顶部声明它)并将其插入页面中最后一个被注释掉的代码块的替代方法 - 但这不起作用任何一个。
我哪里错了?
解决方案
推荐阅读
- java - 在测试中找不到 Spring Boot Health Endpoint
- c# - FileHelpers - 使用 FixedLengthRecords 进行子类化
- webpack - html-webpack-plugin 将错误的路径写入 src 标签
- php - 如何因不活动而使 Laravel 护照令牌过期
- python - 代码应仅返回 1 时返回数字列表
- android - 我收不到 Firebase 和 Google 开发者邀请电子邮件
- go - 处理动态 JSON 模式解码
- java - 多表 - 缺失数据
- r - 遍历列序列(具有相同的作物相关数据)以在 R 中构建整洁的 rbind 数据集
- reactjs - 用于类型检查的 PropTypes