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); }