2015-10-19 228 views
-1

我有一个功能,应该检查旧数据对数据。我正在解析data和oldData以分别获取JSON对象,因为dbData和formData只是包含ID和HTMML表单值的字符串。该函数的用法是检查用户是否在HTML表单中改变了一些textareas文本。我想通过检查每个textarea的ID,然后检查formData和Data中的值是否相同。在那种情况下,没有改变,并且该函数将返回true。JSON解析对象和通配符

的数据串IM解析看起来是这样的:

"[{\"texts\":[{\"default\":true,\"bread-texts\":false,\"textarea1\":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3\":\Apple \",\"textarea4\":\"coffe\",\"textarea5\":\"Tea\",\"signature\":true,\"profile\":\"header\",\"fontsize\":\"26\",\"fontsize-headers\":\"10.5\",\"fontcolor\":\"#0000\",\"textfont\":\"header-large\",\"textsub1\":\"Bold\",\"font\":\"ICA%20Text\",\"textsub\":\"Regular\",\"textsize\":\"20\",\"textsize-signature\":\"9.5\",\"textsizesmall\":\"5.5\",\"textsizesmall-placer\":\"2.75\",\"vers-placer\":\"false\",\"text-colored\":\"%23000000\",\"s-all-customers\":true,\"new-customers\":true,\"undefined\":\"\"}]}]" 

因此,例如,我要检查ID为dbData和FORMDATA“textarea1”,然后检查是否值是一样的。这可以使用通配符来完成,还是有更好的方法来存档?

function CheckValues() { 

    var isChanged = false; 
    var formData = $.parseJSON(data); 
    var dbData = $.parseJSON(oldData);     
    if(formData !== dbData) { 
     var isChanged = true; 
    } 
    return isChanged; 
} 
+1

你的JSON字符串有语法错误...... - 在这个'\ “textarea3 \”:\ “牛奶” \“'...所以这'$ .parseJSON'将返回'FALSE' ,因为你的对象结构是错误的... – Legionar

+0

不容易为什么要比较两个对象如果旧的和新的json字符串的数据结构是相同的,你可以将JSON字符串与'if(data === oldData ){''而不是解析它们两个: – Blindman67

+0

Th真正的json字符串即时通讯使用正常工作,为了演示,我不得不将它与上下文相提并论,因为字符串包含的id不是textareas。我必须检查textareas而不是整个表格。 – koffe14

回答

1
The code shown below works in IE9+, Chrome, FireFox but other 
browsers yet to test. The example shows two different values, data and 
OldData - data contains "Tea" where as OldData contains "OldTea" so 
isChanged flag is true. 
function CheckValues() { 
      var data = "{\"disable\":false,\"textarea1 
      \":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3 
      \":\"Milk\",\"textarea4\":\"Coffe\",\"textarea5\":\"Tea\"}"; 

      var oldData = "{\"disable\":false,\"textarea1 
      \":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3 
      \":\"Milk\",\"textarea4\":\"Coffe\",\"textarea5\":\"OldTea\"}"; 

      var formData = JSON.parse(data); 
      var dbData = JSON.parse(oldData); 

      var oFormData = Object.keys(formData); 
      var oDbData = Object.keys(dbData); 

      var isChanged = false; 
      if (oFormData.length === oDbData.length) 
      { 
       for (var i = 0; i < oFormData.length; i++) { 
        var propName = oFormData[i]; 
        if (typeof (dbData[propName]) === "undefined") { 
         isChanged = true; 
         break; 
        } 
        else { 
         if (formData[propName] !== dbData[propName]) { 
          isChanged = true; 
          break; 
         } 
        } 
       } 
      } 
     } 
+0

非常有趣和信息丰富。我必须查找object.keys。我想避免使用固定值,因为用户可能会在textarea中进行更改,因此值可能会更改。相反,我必须检查propName是否为“textarea1”,“textarea2”等。 – koffe14