ExtJs使用Array向后臺發送大量數據
我們在使用Extjs開發系統時,Extjs通過json從后臺獲取數據,同時保存數據時通過Post方式向服務器發送數據:
[javascript] view plaincopy
- Ext.Ajax.request({
- url : "/application/controller/field/AddHeaderGroup.action",
- method : 'POST',
- params : {
- displayName:nodeText,
- queryId : queryId
- },
- success : function(response, opts) {
- newNode.set("id",response.responseText.replace(/'/g,""));
- //console.log(newNode.get('id'));
- parentNode.appendChild(newNode);
- }
- });
有時要在編輯一個完整的grid之后點擊“保存”時一次性保存整個grid的內容,Extjs可以通過store的getModifiedRecords和getRemovedRecords方法得到變化的和刪除內容。這一般都會使用javascript的數組實現:先把一行數據push到數組中,再把一行數據的數組push到另一個數組中,發送到服務器。服務器端通過字符串解析還原數據內容。
這個過程中存在一個不足:數組中的字符串數據中如果有",",服務器端在解析數據時常得不到正確的結果---服務器端只能通過字符串的split(",")函數來分拆字符串。
那要怎么才能解決這個問題呢?
Extjs提供了數組編碼:Ext.encode(Array)來解決這個問題。在把數組push到另一個數組中時,使用arr1.push(Ext.encode(arr2)),把編碼后的數據push到另一個數組中(可以多層嵌套數組)。然后在服務器端解析每個使用Ext.encode()編碼的數組時,都要使用:JSONArray.fromObject(groupList)把字符串還原成一個JSONArray。當然,每一個JSONArray.fromObject要對應一個Ext.encode()。這樣就可以相對完美的解決Extjs批量保存數據時字符串中存在“,”造成的問題。