我有大量报告的wcf服务,它将json数据返回给我的jqgrid。一切都按预期工作。但是,由于每个报表查询的用户输入数量很多,我选择使用与我在服务器上设置的系列“输入模型”匹配的json字符串。我不想在我的路线中弄乱冗长复杂的查询字符串。
问题:如何添加jqGrid查询字符串params我的json字符串我上传到服务器?我试过'loadBeforeSend',但我似乎无法覆盖ajax网址。我无法使用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 });
}
答案 0 :(得分:2)
如果您使用mtype: 'GET'
并仅仅设置附加到URL的附加参数,则可以使用jqGrid的postData
参数。如果将postData
定义为函数,您将获得最佳结果(有关详细信息,请参阅here)。
另一种方法是使用beforeRequest,其中this
将设置为网格DOM元素,您可以访问(并根据需要更改)jqGrid per {{url
参数1}}。您当然可以使用this.p.url
而不是直接更改$(this).jqGrid('setGridParam','url',yourNewUrl);
。
我不建议您在案例中使用this.p.url
作为函数。顺便说一下,如果使用datatype
作为函数,则无法使用beforeRequest。
答案 1 :(得分:0)
我讨厌回答我自己的问题,但马修提供的answer完美无缺。这个问题有点含糊不清,无论如何。
简而言之,您需要从'datatype'参数调用外部ajax函数。因为现在加载了jqGrid(尽管没有任何数据),你可以从用户输入中捕获参数数据(即记录集的第3页,排序'desc'等)并将其添加到你的json字符串中。
这使您的服务成为一条真正简单的uri路线。希望这有助于某人。