2012-07-10 107 views
0

我送通過ajax post數據發送時排除出對象的數據,並且這些數據看起來像這樣:jQuery的通過AJAX

var cardProperties = { 
    container: $("#cardContainer"), 
    elementsWrapper: $("#cardElementsWrapperBorder"), 
    size: 0, //0 -> (90x50mm <-> 510px x 283px), 1-> (85x55mm <-> 482px x 312px) 
    position: "h", //default horizontal 
    bgImagesPath: "media/images/designs/backgrounds/", //path to card bg images 
    floatingImagesPath: "media/images/designs/floating-images/", //path to card bg images 
    imagesPerPage: 8, 
    innerBorderMargins: 40, //this should be divided by 2 to get the actual margin 
    currentCardSide: 1 
}; 

所以basicly有一些常用的數據,但領域,如containerelementWrapper是可能包含關於該對象的很多信息,也是子對象,所以這會導致我非常醜陋的錯誤Uncaught RangeError: Maximum call stack size exceeded,因爲我不需要這兩個字段,我怎麼能從對象中排除它而不刪除任何信息,因爲稍後我將在js腳本中使用這些內容。

編輯

而且,這裏是我的ajax代碼:

$.post("server.php", {data: cardProperties}, 
    function(response){ 

    } 
); 
+0

最簡單的方法是構造一個新的對象,它只包含您想通過AJAX發送的鍵。 – Matt 2012-07-10 21:42:38

+0

@Matt事實上,這將解決我的問題,但如果這是可能的,我想避免這一點。 – Linas 2012-07-10 21:44:37

回答

1

刪除功能和對象,您只要有這些字符串和數字:

var propertiesForAjax = (function(obj){ 
     var out = {}; 
     for(var i in obj){ 
      if(typeof obj[i]==='object' || typeof obj[i]==='function') continue; 
      out[i] = obj[i]; 
     } 
    })(cardProperties); 

或不自我執行功能:

function transformProps(obj){ 
    var out = {}; 
    for(var i in obj){ 
     if(typeof obj[i]==='function' || typeof obj[i]==='object') continue; 
     out[i] = obj[i]; 
    } 
} 

var toPost = transformProps(cardProperties); 

注:

  • ,如果你正在改變一個對象,你需要嘗試一些稍微不同(覈對例如有效對象的列表)
  • ,如果你不知道什麼你正在改變,你可能不應該使用這個,因爲你可能有意想不到的輸出/丟失的東西。