2015-10-19 191 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