0

我有一个时间表,我的几个员工每天都在使用和填写。我想为他们添加该功能,以便他们能够点击“保存”,然后他们可以将保存的内容加载回时间表中。

我的保存部分工作得很好。它只是将工作表中的数据保存到数据库中的某些表中。我遇到的真正问题/问题是将其加载回数据库的最佳方法是什么?我以前做过一些非常简单的保存/加载的东西,但只有一个字段。我使用了这样的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 多个字段中。为每个字段设置这样的函数听起来非常糟糕,所以我认为必须有更好的方法来解决这个问题。我能得到一些建议吗?

4

2 回答 2

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);
    }
}
于 2013-03-16T00:04:32.610 回答
0

一个整洁的方法是让页面上的 javascript 为任何更改的字段设置一个标志。然后,当员工提交数据时,实际发送的唯一数据是所做的更改。因此,如果您使用 ajax,我的建议是:对于用户所做的每次编辑,将更改添加到您将在用户点击提交时通过 ajax 发送的对象。

于 2013-03-15T23:53:51.253 回答