我该如何调用refresh方法

时间:2011-03-18 12:53:18

标签: javascript jqgrid refresh reload

问题是这样的 我在没有 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>

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

没有param可以发布到服务器

但如果我点击刷新按钮就可以了

我该如何解决这个问题

谢谢你的回答

2 个答案:

答案 0 :(得分:2)

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

$(document).ready(function() {/*here*/});中是否有所有代码?

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

您还应删除已弃用的imgpath参数,并将sortname: 'dateEntered'替换为sortname: 'name'

如果您发布了您使用的任何测试数据,我可以为您提供您发布的代码的URL以及对我有用的代码。

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

您的网格有datatype: 'json'。在第showRoleList($entityList0,'#pEntityList0');行中,您启动第一个ajax请求,然后立即启动第{a}个$entityList0.trigger("reloadGrid")。第一个请求将内部变量$("#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调用。如果确实需要,我可以解释如何实现这一点。

答案 1 :(得分:0)

好吧,我只是制作一个test.html

 <html ... 
    <script  type="text/javascript"> 
    var $entityList0;  
     $(function(){

       $entityList0 = $("#entityList0");          
       showRoleList($entityList0,'#pEntityList0');         
       $entityList0.jqGrid("navGrid",'#pEntityList0',{});         
       $entityList0.jqGrid("setGridParam",
        {     
             postData:{ACTION:'userRelation',userId:'1111',typeName:'role',flag:true}
        }).showCol("action");   
        $entityList0.trigger("reloadGrid"); 
        });  
var showRoleList = function($entityList,pagerId) {
            $entityList.jqGrid({
                url:'servlet/RoleAction',
                datatype: 'json',       height: 'auto',
                jsonReader:         {
                    repeatitems : false,
                    userdata: "rows"
                },
                colNames:['ID','roleName','detail','actiokn'],
                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',
            }); } </script> 
</head> 
<body>
          <table id="entityList0"></table>
           <div id="pEntityList0"></div>        
</body> 
</html>

第一次打开url test.html

    HeadersPostPutHTMLXML
    application/x-www-form-urlencoded
    _search false
    nd  1300458295847
    page    1
    rows    10
    sidx    dateEntered
    sord    desc

_search=false&nd=1300458295847&rows=10&page=1&sidx=dateEntered&sord=desc

然后我点击刷新按钮

HeadersPostPutHTML
application/x-www-form-urlencoded
ACTION  userRelation
_search false
flag    true
nd  1300458310960
page    1
rows    10
sidx    dateEntered
sord    desc
typeName    role
userId  1111

_search=false&nd=1300458310960&rows=10&page=1&sidx=dateEntered&sord=desc&ACTION=userRelation&userId=1111&typeName=role&flag=true

你可以测试它

你可以看到结果不同了 这是一个简单的页面,你可以轻松测试!如果你能找到错误的地方请告诉我,谢谢你