问题描述
|
因此,我完全是JS newb。我已经阅读了一百篇其他文章,尝试了他们的@R_404_6280@案,但似乎无法使它起作用来挽救我的生命。
这是问题所在:
我有JS和ajax的工作。但仅适用于明确表达的价值观。我尝试对其进行抽象处理,以处理它停止工作的所有变量。
我也愿意采取更好的方法,但这是我到目前为止基于有限的知识所得出的结论。
我的表格非常大。手机上有近四百个“现场”数据采集领域。带宽不是问题,但稳定性和可靠性却是问题,因此该表单应该在输入每个数据时就将其发送过来,允许进行更改和更改,直到准备好提交为止。在此之前,它会发回相同的信息,然后该信息用于显示一个绿点以验证数据是否确实已存储。因此,对于每个表单字段,在FormFieldAStatus表单中都有一个以其命名的ID的“ 0”。我将其包含在下面。
表单摘要:
<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>
这是有效的代码:
function readData() {
new Ajax.Request(\'AjaxRead.PHP\',{
method: \'post\',parameters: $(\'Worksheet\').serialize(true),onSuccess: function(transport) {
var icon = \'<img src=\"images/greendot.png\" align=\"bottom\" style=\"margin-right:5px;\">\';
if (transport.responseText) {
var json=transport.responseText.evalJSON();
if(json.formFieldA) {
var status = $(\'formFieldAStatus\');
status.update(icon); }
if(json.formFieldB) {
var status = $(\'formFieldBStatus\');
status.update(icon); }
if(json.formFieldC) {
var status = $(\'formFieldCStatus\');
status.update(icon); }
}
},onFailure:function(){ alert(\'Something went wrong...\') }
});
}
说真的我不会在其中的400行中检查每个字段。真是疯了。
这是应该起作用但不起作用的代码。
function readData() {
new Ajax.Request(\'AjaxRead.PHP\',onSuccess: function(transport) {
var icon = \'<img src=\"images/greendot.png\" align=\"bottom\" style=\"margin-right:5px;\">\';
if (transport.responseText) {
var json=transport.responseText.evalJSON();
for(var key in json) {
if(!json[key]==\'\') {
var statusName=key+\'Status\';
// Take your pick of the following. I\'ve tried them all.
var status = $(statusName);
var status = $(window[statusName]);
var status = $(key+\'Status\');
var status = $(window[key+\'Status\']);
eval(\"var status = $(\'\"+key+\"Status\');\");
// Did any of them work ever?
status.update(icon); }
}
}
},onFailure:function(){ alert(\'Something went wrong...\') }
});
}
任何帮助将不胜感激。而且,如果有更好的方法可以做到这一点,那么我就会不知所措。
干杯。
最新详细信息:
我添加了这个:
console.log(\'statusname: \'+statusName);
console.log(\'status: \'+status);
console.log(\'status Object: \'+Object.inspect(status));
它吐出:
statusname: fieldNameAStatus
status: [object HTMLElement]
status Object: <span id=\"fieldNameAStatus\" class=\"ajax-success\">
对于我尝试的每种方法...
我取消评论的那一刻:
status.update(icon);
我得到这个代替:
statusname: formIDStatus
status: null
status Object: null
太奇怪了吧?
好。所以现在我有了console.log的东西,(个人而言,谢谢您对我的了解,谢谢您thankyouthankyouthankyouthankyouthankyouthankyouthankyou),我决定看看当我为每个字段使用手动指定的代码时显示的内容。
status: [object HTMLElement]
status Object: <span id=\"fieldNameAStatus\" class=\"ajax-success\">
这是我们拥有的:
工作代码:
读取密钥,创建状态对象,这是一个定义应为“ 0”的html字符串,并且更新没有问题。
不工作:
读取键,创建状态对象,这是一个html字符串,定义了应有的“ 0”,但是更新对象的调用在循环的第一次迭代中将其杀死。
现在怎么办?
解决方法
尝试:
var statusName=json[key]+\'Status\';
看来您只是在抓住键并尝试使用它而不是值。使用\“ for in \”时,还请确保执行json.hasOwnProperty(key)。如果在the12ѭ之后输出是什么?
, var statusName = json[key] + \'Status\';
, 好。有用。我想到了。事实证明,当表单上的一个字段通过时,它快死了,但没有span
可以放置任何东西。碰巧的是,它遇到的第一个对象就是表单本身。我不是特别需要表单名称,但是如果表单不带有JS功能,则表单会中断。我无法通过if语句查看该字段是否为空或不忽略它,因此它保持不变。没事
如果没有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...\') }
});
}
这是要更新的HTML;
<span class=\"ajax-success\" id=\"fieldNameAStatus\"></span>
干杯