我有两个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()可以正常工作。
答案 0 :(得分:2)
你应该使用
postData: {
lobId: function () {
return $(BudgetCore.GridTables.Lob).jqGrid('getGridParam', 'selrow');
}
}
有关详细信息,请参阅the answer。
更新:如果您需要在JSON.stringify
内额外使用serializeGridData
,则无法使用更简单版本的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);
}