2012-10-31 25 views
1

我有兩個jqGrids。在第一個網格中,我選擇一行,第二個網格根據第一個網格的ID刷新數據。至少這是它應該如何工作的。postData方法不執行功能

//This is code from the second grid 
postData: '{ lobId: ' + BudgetCore.getLobId() + ' }', 

//Snippet from BudgetCore... 
getLobId: function() { 
    var row = jQuery(BudgetCore.GridTables.Lob).jqGrid('getGridParam', 'selrow'); 
    return row; 
} 

在Chrome中,我嘗試調試函數getLobid(),但它永遠不會執行。發送postData請求:{lobId:null}。

如果我將上面的代碼更改爲'{lobId:'+ 1 +'}',它就會起作用,所以肯定有一些錯誤導致該函數不能執行。在Chrome JS控制檯執行BudgetCore.getLobId()工作正常。

回答

2

您應該使用

postData: { 
    lobId: function() { 
     return $(BudgetCore.GridTables.Lob).jqGrid('getGridParam', 'selrow'); 
    } 
} 

詳情請參閱the answer

修訂:如果您需要使用額外JSON.stringifyserializeGridData裏面,那麼你不能使用更多的serializeGridData最簡單的版本:

serializeGridData: function (postData) { return return JSON.stringify(postData); } 

的是相反,你應該使用一個稍微複雜一點的版本我在the answer描述serializeGridData

serializeGridData: function (postData) { 
    var propertyName, propertyValue, dataToSend = {}; 
    for (propertyName in postData) { 
     if (postData.hasOwnProperty(propertyName)) { 
      propertyValue = postData[propertyName]; 
      if ($.isFunction(propertyValue)) { 
       dataToSend[propertyName] = propertyValue(); // call the function 
      } else { 
       dataToSend[propertyName] = propertyValue; 
      } 
     } 
    } 
    return JSON.stringify(dataToSend); 
} 
+0

我嘗試這樣做,但ASP.NET ASMX要求後數據由「」包圍。我應該在這個問題中提到這一點。 – Dan

+0

@丹:對不起,但你錯了。 ASMX接受'''這是JSON中允許引用的唯一字符。如果您需要將信息發送到ASMX,您可以使用'serializeGridData'調用'JSON.stringify',它是原點**爲什麼**函數可以'在這種情況下,您只需要使用'serializeGridData'的修改版本。請參閱[答案](http://stackoverflow.com/a/6296601/315935)以獲取相應的代碼。 – Oleg

+0

我會試試這個,只是請注意,在這個相同的網格(第二個),我有一個postData的子網:'{lobId:'+ BudgetCore.getLobId()+'}',並且它工作正常 – Dan