一般来说,您发布的代码应该可以工作,并且在下一次重新加载网格时将使用新的serializeGridData。
您在发布时使用serializeGridData 只是有点奇怪。改用postData参数就够了:
var postData = $('#grid').jqGrid('getGridParam', "postData");
$.extend(postData: {specialParam: "foo"});
此外,在您的原始代码中,您使用$.extend(postData, {specialParam: "foo"});,它修改原始postData。还不错,不过一般的代码
function myGridOnBeforeRequest (postData) {
return $.extend({}, postData, {specialParam: "foo"});
}
甚至
function myGridOnBeforeRequest (postData) {
return $.extend(true, {}, postData, {specialParam: "foo"});
}
会更干净。 $.param 的使用并不是真正需要的。如果你返回一个对象,那么 jQuery.ajax 会自动为你调用$.param。
一种更常见的方法是直接使用postData 参数定义网格,如下所示
postData: {
specialParam: function () { return "foo"; }
}
在你可以在函数中实现更多逻辑的方式中,你可以使用函数体内部的外部scote中的一些变量,或者从页面上现有的控件中获取一些值(详见here) .在这种情况下,您可以在不使用getGridParam 的情况下实现动态 specialParam。
最后一句话。已经从myGridOnBeforeRequest 的颜色(与您的问题中MyGridOnBeforeRequest 的颜色进行比较)可以看出它将以另一种方式解释。如果函数名称以大写字母开头,则表示与您定义的新类MyGridOnBeforeRequest 的constructor 的常用名称转换相对应。您必须将其用作var test = new MyGridOnBeforeRequest();:使用new。只需与var now = new Date(); 比较即可。强烈建议持有标准的 JavaScript 名称转换。