postData方法不执行函数

我有两个jqGrids。 在第一个网格中,我选择一行,第二个网格根据第一个网格的id刷新数据。 至少这是它应该如何工作。

//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()工作正常。

你应该用

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

有关详细信息,请参阅答案 。

更新 :如果你需要在JSON.stringify内部另外使用JSON.stringify ,那么你不能使用更多最简单版本的serializeGridData

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

而不是你应该使用我在答案中描述的更复杂的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); }