Javascript和动态变量。。。阿盖恩

Javascript和动态变量。。。阿盖恩,javascript,ajax,prototypejs,Javascript,Ajax,Prototypejs,所以我完全是个新手。我读过一百篇其他的帖子,尝试过他们的解决方案,但我似乎无法让它发挥作用来拯救我的生命 问题是: 我有JS和ajax可以工作。但仅限于显式表示的值。当我试图抽象它来处理所有变量时,它就停止工作了 我也愿意找到更好的方法来做这件事,但这是我根据自己有限的知识得出的结论 我有一个非常非常大的表格。近400个字段用于移动电话上的“现场”数据采集。带宽不是问题,但稳定性和可靠性是问题,因此表单应该在输入数据时发送数据,允许更改和更改,直到准备好提交为止。在此之前,它将发送回相同的信息,

所以我完全是个新手。我读过一百篇其他的帖子,尝试过他们的解决方案,但我似乎无法让它发挥作用来拯救我的生命

问题是:

我有JS和ajax可以工作。但仅限于显式表示的值。当我试图抽象它来处理所有变量时,它就停止工作了

我也愿意找到更好的方法来做这件事,但这是我根据自己有限的知识得出的结论

我有一个非常非常大的表格。近400个字段用于移动电话上的“现场”数据采集。带宽不是问题,但稳定性和可靠性是问题,因此表单应该在输入数据时发送数据,允许更改和更改,直到准备好提交为止。在此之前,它将发送回相同的信息,然后用于显示绿点,以验证数据是否已实际存储。因此,对于每个表单字段,都有一个
,表单FormFieldAStatus中有一个以其命名的id。我把它包括在下面

表单片段:

<input type="text" class="form-textbox validate[required]" id="input_1" name="formFieldA" size="20" onchange="saveData(); readData()" />
<span class="ajax-success" id="formFieldAStatus"></span>
它吐出:

statusname: fieldNameAStatus 
status: [object HTMLElement] 
status Object: <span id="fieldNameAStatus" class="ajax-success"> 
我得到的是:

statusname: formIDStatus 
status: null 
status Object: null
这很奇怪,对吧

嗯。因此,现在我已经记下了console.log(个人除外,谢谢谢谢谢谢谢谢谢谢你对我的教育),我决定看看当我为每个字段使用手动指定的代码时它显示了什么

status: [object HTMLElement]
status Object: <span id="fieldNameAStatus" class="ajax-success">
状态:[对象HtmleElement]
状态对象:
以下是我们所拥有的:

工作代码: 键被读取,状态对象被创建,这是一个html字符串,定义了它应该使用的
,并且更新没有问题

非工作: 键被读取,状态对象被创建,这是一个html字符串,定义了
它应该执行的操作,但是更新对象的调用会在循环的第一次迭代中终止它

现在怎么办?

试试:

var statusName=json[key]+'Status';

看起来您只是抓住了关键点,并试图使用它,而不是值。在使用“for in”时,还要确保执行json.hasOwnProperty(键)。如果您
console.log(!json[key]='')

好的。它起作用了。我想出来了。结果表明,当表单上的一个字段被传递时,它正在消亡,但它没有
span
来放置任何内容。碰巧,它遇到的第一个问题就是形式本身。我并不特别需要表单名称,但是如果表单不存在JS功能,那么表单就会出现中断。我无法获取查看字段是否为空或不忽略它的if语句,因此它保持不变。没什么大不了的

var statusName = json[key] + 'Status';
如果没有console.log中的线索,我就无法理解这一点。救了我的命

再次感谢。以下是最终代码:

function readData() {
  new Ajax.Request('AjaxRead.php', {
    method: 'post',
    parameters: $('Worksheet').serialize(true),
    onSuccess: function(transport) {
      var icon = '<img src="images/success.png" align="bottom" style="margin-right:5px;">';
      var noicon = '';
      if (transport.responseText) {
        var json=transport.responseText.evalJSON();
        for(var key in json) {
          var statusName=key+'Status';
          var status = $(statusName); 
          if(!json[key]=='') {
            status.update(icon); }
          else {
            status.update(noicon); }
        }
      }
    },
    onFailure:function(){ alert('Something went wrong...') }
  });
}
函数readData(){
新的Ajax.Request('AjaxRead.php'{
方法:“post”,
参数:$(“工作表”)。序列化(true),
onSuccess:功能(传输){
var图标=“”;
var noicon=“”;
if(transport.responseText){
var json=transport.responseText.evalJSON();
for(json中的var键){
var statusName=键+“状态”;
变量状态=$(状态名称);
如果(!json[key]=''){
状态更新(图标);}
否则{
状态更新(noicon);}
}
}
},
onFailure:function(){alert('发生了错误…')}
});
}
其中这是要更新的HTML

<span class="ajax-success" id="fieldNameAStatus"></span>


干杯

您使用的是什么JS框架?您是否尝试过使用调试器来检查
onSuccess
回调中循环中的值?您是否尝试过在回调中使用
console.log
。是的,我用的是原型。我知道我忘了提什么。我继承了一个已经大量使用它的表单,我正在为它添加我自己的代码。我尝试直接访问控制台,但chrome没有显示任何异常。我启动了FF并安装了firebug,这并没有让我看到更多。从我收集的原型来看,它不喜欢轻易地揭示它的错误。我找到了一个调试脚本,它似乎添加了更多的信息,但对我缺乏经验的眼睛来说没有任何用处。有几个firebug错误和一堆来自jotform的错误,这就是我猜表单是如何制作的。还有我的ajax请求,它们推拉正确的信息。好吧,关键是我追求的价值,真的。我想要字段的名称,这样我就可以确定它是页面上要更新的正确名称,然后使用根据字段名称和“状态”名称生成的id设置正确的状态。当我执行console.log(!json[key]='')时,它只会说true。“console.log($(statusName));”是什么意思将输出放在“var statusName=key+'Status';”之后时?在某一点上,该决议正在崩溃。有可能你没有那个id的元素。现在我知道了这个奇怪的console.log的美妙之处,这里还有更多。说真的,我以前怎么不知道?所以很更好。所以我把这个扔进去只是为了好玩:console.log('statusname:'+statusname);console.log('status1:'+status1);console.log('status1对象:'+Object.inspect(status1));它吐出:statusname:policyNumberStatus状态:[object HtmleElement]状态对象:对于我尝试的每个方法。。。我取消注释的那一分钟:status.update(图标);我得到的是:statusname:formIDStatus状态:null状态对象:null因此出于某种原因,我得到了icon的值,它是一个html,表示成功,我认为它是一个表示成功的对象。我接近了吗?
var statusName=json[key]+'Status';
var statusName = json[key] + 'Status';
function readData() {
  new Ajax.Request('AjaxRead.php', {
    method: 'post',
    parameters: $('Worksheet').serialize(true),
    onSuccess: function(transport) {
      var icon = '<img src="images/success.png" align="bottom" style="margin-right:5px;">';
      var noicon = '';
      if (transport.responseText) {
        var json=transport.responseText.evalJSON();
        for(var key in json) {
          var statusName=key+'Status';
          var status = $(statusName); 
          if(!json[key]=='') {
            status.update(icon); }
          else {
            status.update(noicon); }
        }
      }
    },
    onFailure:function(){ alert('Something went wrong...') }
  });
}
<span class="ajax-success" id="fieldNameAStatus"></span>