jQuery jqGrid触发器reloadGrid

时间:2010-05-25 02:23:41

标签: jquery jquery-plugins jqgrid

我正在使用jqGrid来显示搜索结果。单击搜索按钮时,它会执行以下操作:

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

url包含搜索参数,例如:

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

Web服务器正在接收此URL并正确响应。但在客户端,它会在jqgrid.min.js第21行抛出此错误:

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

我该怎么做才能解决这个问题?我在许多其他地方成功使用jqGrid,但这是我正在更改URL并重新加载的唯一一个。

4 个答案:

答案 0 :(得分:2)

尝试使用此页面上的非缩小版本查看其周围环境的更多背景信息。你所看到的是解析停止的地方;我怀疑你的错误是进一步的。通过这种方式,您可以查看当前的URL是否正在使用以及是什么将其丢弃。

答案 1 :(得分:1)

在我看来,你在jqgrid.min.js中的错误对应于.jqGrid('setGridParam', { url: url })开头的jqGrid direct的未压缩版本中的错误(参见 grid.base.js的第82行) )。它是在3.6版本的jqGrid中引入的如此命名的“新API”的一部分。代码片段以以下行开头:

$.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);
    }
//...

我不确定为什么会出现“语法错误”,我建议您验证网格的ID是否真的是“搜索”。如果您没有找到错误,请在问题中添加更多信息。例如:您使用的是哪个版本的jQuery?包含代码片段和加载的JavaScripts顺序也会有所帮助。

答案 2 :(得分:0)

您应该尝试这样的事情,而不是设置网址。

我将此用于我添加到网格的自定义下拉菜单。 Basicaly我有条件地在网格的顶部工具栏部分添加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个搜索字段执行相同的操作,即使它们是空白的,也可以从参数中清除它们。这将导致您现在正在编辑的相同网址。 GetRecords.aspx?InActive = 0&amp; State = O&amp; StateCol = 9是我目前在服务器上得到的。

答案 3 :(得分:0)

刷新方法适用于我。 每次通话都是令人耳目一新的日期(往返)。

最后两行代码完全可以实现。

我这样使用它:

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");
}