我有一张时间表,我的几位员工每天都会使用和填写。我想为他们添加功能以便能够点击“保存”,然后他们可以将他们保存的内容加载到时间表中。
我有保存部分正常工作。它只是将工作表中的数据保存到数据库中的某些表中。我遇到的真正问题是将这个加载回数据库的最佳方法是什么?我之前做过一些非常简单的保存/加载,但只有一个字段。我使用了像这样的ajax调用:
function grabTransportNum(strURL) {
var req = getXMLHTTP();
if (req) {
req.onreadystatechange = function() {
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
document.getElementById('tandt1').innerHTML=req.responseText;
} else {
alert("There was a problem while using XMLHTTP:\n" + req.statusText);
}
}
}
req.open("POST", strURL, true);
req.send(null);
}
}
所有这一切都是拉出一个数字并将'tandt1'的值设置为返回的任何数字。对每个字段执行此操作听起来很容易,但根据保存的数量,我可能需要将数据加载到100多个字段中。对于每一个字段都有这样的功能听起来非常糟糕,所以我认为必须有更好的方法来解决这个问题。我能得到一些建议吗?
答案 0 :(得分:1)
您可以做的不是从服务器发送单个字段,而是发送包含多个字段的JSON,例如:
{
"fields": [
{ "id": "tandt1", "value": "persisted value"},
//in here you'd have the rest of the fields in the same format
]
}
然后将您的功能更改为更像这样的内容:
function reloadFields(strURL) {
var req = getXMLHTTP();
if (req) {
req.onreadystatechange = function () {
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
var data = JSON.parse(req.responseText);
if (data && data.fields && data.fields.length > 0) {
for (var field,i=0;i<data.fields.length;i++) {
field = data.fields;
document.getElementById(field.id).innerHTML = field.value;
}
}
} else {
alert("There was a problem while using XMLHTTP:\n" + req.statusText);
}
}
}
req.open("POST", strURL, true);
req.send(null);
}
}
答案 1 :(得分:0)
这样做的一个简洁方法是为页面上的javascript设置任何已更改字段的标志。然后,当员工提交数据时,实际发送的唯一数据就是所做的更改。因此,如果您使用的是ajax,我建议这样做:对于用户进行的每次编辑,将更改添加到您在用户点击提交时通过ajax发送的对象。