在jqGrid中的loadBeforeSend上设置URL

我有一个wcf服务,用于大量报告,将json数据返回给我的jqgrid。 一切都按预期工作。 但是,由于每个报告查询的用户输入数量很多,我选择使用与我在服务器上设置的系列“输入模型”匹配的json字符串。 我不想在我的路线中弄乱冗长复杂的查询字符串。

问题:如何添加jqGrid查询字符串params我的json字符串我上传到服务器? 我试过’loadBeforeSend’,但我似乎无法覆盖ajaxurl。 我无法使用url参数的函数,因为网格参数尚不可用。 有任何想法吗? 谢谢。

我的jqGrid函数(为简洁起见缩短):

function loadGrid() { var tbl = $('#tbl'); tbl.jqGrid({ loadBeforeSend: function () { var ai = { dateFrom: dbDateTime($('#at-datefrom').val()), dateTo: dbDateTime($('#at-dateto').val()), sidx: tbl.getGridParam('sortname'), sord: tbl.getGridParam('sortorder'), page: tbl.getGridParam('page'), rows: tbl.getGridParam('rowNum') }; var newUrl = getBaseURL() + 'ReportingService.svc/report/?json=' + JSON.stringify(ai); tbl.jqGrid().setGridParam({ url: newUrl });//Everything works perfect up to this point. All the values are in my json string and my url is correct. }, url: '', //Empty because I need to override it datatype: 'json', mtype: 'GET', ajaxGridOptions: { contentType: 'application/json' }, loadError: function (xhr, status, error) { alert(status + "" + error); } }).navGrid('#attendance-pager', { edit: false, add: false, del: false }); } 

如果你使用mtype: 'GET'和neew只是为了设置附加到URL的附加参数,你可以使用postData参数。 如果将postData定义为函数,您将获得最佳结果(有关详细信息,请参见此处 )。

另一种方法是使用beforeRequest ,它将设置为网格DOM元素,您可以访问(并根据需要更改)每个this.p.url的jqGrid的url参数。 你当然可以使用$(this).jqGrid('setGridParam','url',yourNewUrl); 而不是直接改变this.p.url

我不建议您在您的情况下使用datatype作为函数。 顺便说一下,如果使用datatype作为函数,则不能使用beforeRequest 。

我讨厌回答我自己的问题,但马修提供的这个答案非常有效。 问题有点模棱两可,但无论如何。

简而言之,您需要从’datatype’参数调用外部ajax函数。 因为现在加载了jqGrid(尽管没有任何数据),您可以从用户输入(即记录集的第3页,排序’desc’等)捕获参数数据,并将其添加到您的json字符串中。

这为您的服务提供了一条真正简单的uri路线。 希望这有助于某人。