在jqGrid中的loadBeforeSend上设置URL

时间:2011-06-09 21:59:57

标签: javascript jquery jqgrid

我有大量报告的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 });
    }

2 个答案:

答案 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路线。希望这有助于某人。