问题是这样的
我初始化一个没有postData的jqgrid,
并设置hiddengrid:true,

我想首先在没有请求的情况下初始化表,
然后会手动请求数据

js

var showRoleList = function($entityList,pagerId)
{
    $entityList.jqGrid({
        url:'servlet/RoleAction',
        datatype: 'json',
        height: 'auto',
        jsonReader:
        {
            repeatitems : false,
            userdata: "rows"
        },
        colNames:['ID','roleName','detail','action'],
        colModel:
        [
            {name:'id',index:'id',hidden:true},
            {name:'name',index:'name', width:100,sortable:false},
            {name:'description',index:'description', width:400,sortable:false},
            {name:'action',index:'action', width:40,sortable:false}
        ],
        rowNum:10,
        altRows:true,
        autowidth:true,
        mtype: "POST",
        rownumbers: true,
        rownumWidth: 30,
        imgpath:'css/images',
        sortorder:'desc',
        viewrecords: true,
         multiselect:true,
        loadui:'disable' ,
        gridview:true,
        hiddengrid:true,
        page:1,
        pginput:true,
        pager: pagerId,
        sortname: 'dateEntered',
        altclass:'ui-priority-secondary_1',
    });
}

showRoleList($("#entityList0"),"#pEntityList0");
**$entityList0.jqGrid("setGridParam", {
       postData:{ACTION:'userRelation',userId:user.id,typeName:'role',flag:true},
});**

 **$entityList0.trigger("reloadGrid", [{page:1}]);**


的HTML:

<table id="entityList0"></table>
<div id="pEntityList0"></div>


但失败了
当我调用触发器时,可以发送请求,但是没有postData

没有参数可以发布到服务器

但是,如果我单击刷新按钮,它可以工作

我该如何解决这个问题

谢谢你的回答

最佳答案

我无法重现您的问题。唯一明确的语法错误是将flag:true},})替换为flag:true}})(删除逗号)。同样,您应将altclass:'ui-priority-secondary_1',}替换为altclass:'ui-priority-secondary_1'}

所有代码都在$(document).ready(function() {/*here*/});内部吗?

在代码中,变量user$entityList0未初始化。您确定在上面的代码中使用set $entityList0=$("#entityList0")并至少将user初始化为{}吗?

例如,还应该删除不推荐使用的imgpath参数,并将sortname: 'dateEntered'替换为sortname: 'name'

如果您发布使用的任何测试数据,我可以为您提供发布代码的网址,这些代码对我有用。

更新:好的!现在有了可以测试的代码,我看到了问题所在。问题是您尝试在第一个ajax请求结束之前启动第二个ajax请求。

您的网格具有datatype: 'json'。在showRoleList($entityList0,'#pEntityList0');行中,启动第一个ajax请求,然后立即就$entityList0.trigger("reloadGrid")启动第二个ajax请求。第一个请求将内部变量$("#entityList0")[0].grid.hDiv.loading设置为true,并且您启动的所有其他请求将被忽略,直到超时或服务器返回响应或错误为止。

在设置postData参数之前,您可能真的不希望发送第一个请求。因此,您应该在jqGrid的初始化时使用datatype: 'local'(在showRoleList函数中)。然后,应将datatype: 'json'设置为postData

$entityList0.jqGrid(
    "setGridParam",
    {
        datatype: 'json',
        postData: {
            ACTION:'userRelation',
            userId:'1111',
            typeName:'role',
            flag:true
        }
    }
);


或者,您将需要在重新加载网格之前中止先前的ajax调用。如果确实需要,我可以解释一下如何实现。

09-11 17:45