Установите URL-адрес на loadBeforeSend в jqGrid - PullRequest
3 голосов
/ 10 июня 2011

У меня есть служба wcf для большого количества отчетов, которая возвращает данные json в мою jqgrid.Все работает как положено.Однако из-за большого количества пользовательских входных данных для каждого запроса отчета я решил использовать строку json, соответствующую серии «входных моделей», которые я настроил на сервере.Я не хочу связываться с длинными сложными строками запросов в моих маршрутах.

Вопрос: Как я могу добавить параметры строки запроса jqGrid, чтобы моя строка json загружалась на сервер?Я пробовал «loadBeforeSend», но я не могу переопределить URL-адрес 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 ]

2 голосов
/ 10 июня 2011

Если вы используете mtype: 'GET' и просто для установки дополнительных параметров, которые будут добавлены к URL, вы можете использовать postData параметр jqGrid.Наилучшие результаты вы получите, если определить postData как функцию (подробности см. здесь ).

Еще один способ - использовать beforeRequest , где this будет установлен элемент DOM сетки, и вы сможете получить доступ (и при необходимости изменить) к параметру url jqGrid для this.p.url.Конечно, вы можете использовать $(this).jqGrid('setGridParam','url',yourNewUrl); вместо прямого изменения this.p.url.

Я не рекомендую вам использовать datatype в качестве функции в вашем случае.Кстати, вы не можете использовать beforeRequest в случае использования datatype в качестве функции.

0 голосов
/ 10 июня 2011

Я ненавижу отвечать на свой вопрос, но этот ответ , предоставленный Мэтью, работает отлично.Вопрос немного двусмысленный, но все равно.

В двух словах, вам нужно вызвать внешнюю функцию ajax из параметра datatype.Поскольку jqGrid теперь загружен (хотя и без каких-либо данных), вы можете получить данные параметров из пользовательского ввода (т. Е. Страницы 3 набора записей, отсортировать «desc» и т. Д.) И добавить их в строку json.

Это делает ваш маршрут UR по-настоящему простым.Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...