jQuery jqGrid триггер reloadGrid - PullRequest
5 голосов
/ 25 мая 2010

Я использую jqGrid для отображения результатов поиска.Когда кнопка поиска нажата, она делает это:

$("#Search").jqGrid('setGridParam', { url: url }).trigger("reloadGrid");

Где url содержит параметры поиска, например:

var url ="/search?first=joe&last=smith"

Веб-сервер получает этот URL и отвечает соответствующим образом,Но на стороне клиента он выдает эту ошибку в строке 21 jqgrid.min.js:

Syntax error:    
}); b.fn.jqGrid = function(f) { 

Что я могу сделать, чтобы это исправить?Я успешно использую jqGrid во многих других местах, но это единственное место, где я меняю URL и перезагружаюсь.

Ответы [ 4 ]

2 голосов
/ 25 мая 2010

Попробуйте использовать неуменьшенную версию на этой странице, чтобы увидеть больше контекста того, почему она окружает. То, что вы видите, там, где анализ останавливается; Я подозреваю, что ваша ошибка еще больше. Таким образом, вы можете увидеть, используется ли текущий URL и что его выбрасывает.

1 голос
/ 26 мая 2010

Мне кажется, что ошибка в jqgrid.min.js соответствует ошибке в несжатой версии jqGrid direct в начале .jqGrid('setGridParam', { url: url }) (см. Строку 82 grid.base.js ). Это часть так называемого «нового API», представленного в версии 3.6 jqGrid. Фрагмент кода начинается со следующих строк:

$.fn.jqGrid = function( pin ) {
    if (typeof pin == 'string') {
        var fn = $.fn.jqGrid[pin];
        if (!fn) {
            throw ("jqGrid - No such method: " + pin);
        }
        var args = $.makeArray(arguments).slice(1);
        return fn.apply(this,args);
    }
//...

Я не уверен, почему у вас есть «синтаксическая ошибка», но я рекомендую вам проверить, что идентификатор сетки действительно «Поиск». Если вы не найдете ошибку, добавьте больше информации в свой вопрос. Например: какую версию jQuery вы используете? Также было бы полезно включить фрагмент кода и порядок загрузки скриптов JavaScripts.

0 голосов
/ 14 июля 2010

Метод обновления работает хорошо для меня. Это обновление Даты (до и от) в каждом вызове.

Последние две строки кода делают всю магию.

Я использую это так:

function refreshGrid() {    

    var gridSel = "#analyticsTbl";
    var fromDt = jQuery('#dpFrom').datepicker().val();
    var toDt = jQuery('#dpTo').val();

    var url = 'myService.asmx/MyWebMethod?fromdt=' + fromDt + '&' + 'todt=' + toDt;


    jQuery(gridSel).jqGrid({
        url: url,
        mtype: "GET",
        datatype: "xml",
        colNames: ['Product', 'Group', 'Score', 'Date'],
        colModel: [
                   { name: 'Product',  index: 'Product', sortable: true },
                   { name: 'Group', index: 'Group', sortable: true },
                   { name: 'Score', index: 'Score', sortable: true },
                   { name: 'Date', index: 'Date', sortable: true }
                  ],
        viewrecords: true,
        sortorder: "desc",
        caption: "Report",       
        hidegrid: false,
        autowidth: true,
        height: "100%"

    });

    jQuery(gridSel).jqGrid('navGrid', '#pgwidth', { edit: false, add: false, del: false });


    jQuery(gridSel).jqGrid('setGridParam', { url: url });
    jQuery(gridSel).trigger("reloadGrid");
}
0 голосов
/ 01 июня 2010

Вместо установки URL вы должны попробовать что-то вроде этого.

Я использую это для пользовательских выпадающих меню, которые добавляю в сетку. По сути, я условно добавляю 2 выпадающих меню в верхнюю часть панели инструментов сетки для быстрого поиска.

var toolbarspan = $("<span>");

    if (tblDef.State != null) {
        $("<label>").attr("for", "selectState").append(" State: ").appendTo("#t_colch")
        $("<select>").attr("id", "selectState")
            .append($("<option>").attr({selected: true, value: "O"}).append("Open"))
            .append($("<option>").attr("value", "C").append("Closed"))
            .append($("<option>").attr("value", "B").append("Both"))
            .change(selChange)
            .appendTo("#t_colch")
       }

    $("<label>").attr("for", "selectInActive").append(" InActive: ").appendTo("#t_colch")
        $("<select>").attr("id", "selectInActive")
            .append($("<option>").attr({selected: true, value: "0"}).append("Active"))
            .append($("<option>").attr("value", "1").append("InActive"))
            .append($("<option>").attr("value", "B").append("Both"))
            .change(selChange)
            .appendTo("#t_colch");

    }

Если вы хотите, чтобы ваши 2 поля также находились на верхней панели инструментов, вам необходимо добавить следующие параметры таблицы.

 toolbar: [true, "top"],

Сначала добавьте это в определение таблицы.

beforeRequest: myBeforeRequest(this),

Затем определите свою функцию myBeforeRequest примерно так:

function myBeforeRequest(grid) {
    $(grid).jqGrid("setPostDataItem", "InActive", 0);
    var chkVal="";
    if ($("#selectInActive").length > 0)
    {
        chkVal = $("#selectInActive").val();
        if (chkVal == "B") $(grid).jqGrid("removePostDataItem", "InActive");
        else $(grid).jqGrid("setPostDataItem", "InActive", chkVal);
    }
    if (tblDef.State != null) {
        $(grid).jqGrid("setPostDataItem", "StateCol",  tblDef.State);
        $(grid).jqGrid("setPostDataItem", "State", "O");
        if($("#selectState").length > 0)
        {
            chkVal = $("#selectState").val();
            if (chkVal == "B") $(grid).jqGrid("removePostDataItem", "State");
            else $(grid).jqGrid("setPostDataItem", "State", chkVal);        
        }
    }
    }

Вы можете сделать то же самое для ваших 2 полей поиска, даже удалив их из параметров, если они не заполнены. Это приведет к тому же URL, который вы сейчас редактируете вручную. GetRecords.aspx? InActive = 0 & State = O & StateCol = 9 - это то, что я сейчас получаю на сервере.

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