2011-04-10 25 views
0

所以我有一个页面加载运行的JavaScript函数,列举如下:的jqGrid无法从JSON响应填补自身

function createGrid() 
     { 
      var myGrid = 
       jQuery("#responseMessages"), 
       reportBtn = "<input style='height:22px;width:100px;' type='button' value='Report' />", 
       getColumnIndexByName = function(grid,columnName) { 
        var cm = grid.jqGrid('getGridParam','colModel'); 
        for (var i=0,l=cm.length; i<l; i++) { 
         if (cm[i].name===columnName) { 
          return i; // return the index 
         } 
        } 
        return -1; 
      }; 

      myGrid.jqGrid({ 
       url: "<%= Url.Action("GetMessages", "Home") %>", 
       datatype: 'json', 
       myType: 'GET', 
       height: 'auto', 
       colModel: [ 
        { name:'distance', index:'distance', label:'Distance', width:100 }, 
        { name:'age', index:'age', label:'Age', width:75 }, 
        { name:'message', index:'message', label:'Message', width:500 }, 
        { name:'messageId', index:'messageId', key:true, hidden:true }, 
        { name:'report', index:'report', label: 'Report', width:100, 
         formatter:function() { return reportBtn; } } 
       ], 
       loadComplete: function() { 
        var i=getColumnIndexByName(myGrid,'report'); 
        // nth-child need 1-based index so we use (i+1) below 
        $("tbody > tr.jqgrow > td:nth-child("+(i+1)+") > input",myGrid[0]).click(function(e) { 
         var tr=$(e.target,myGrid[0].rows).closest("tr.jqgrow"); 
         var x=window.confirm("Are you sure you want to report this message?") 
         if (x) 
         { 
          reportMessage(tr[0].id); 
         } 
         e.preventDefault(); 
        }); 
       }, 
       rowNum:25, 
       viewrecords:true, 
       rowList:[10,25,50], 
       pager: '#pager', 
       caption: "What's going on in your area!" 
      }); 
     } 

现在它加载网格精细,实际上使该public ActionResult GetMessages()在通话服务器正确,并且没有收到来自响应的任何数据,所以它没有填满网格并且表示没有记录。好极了!

问题是,我点击一个按钮的页面,这将触发该JavaScript方法上:

function reloadGrid() 
     { 
      $("#responseMessages").trigger("reloadGrid"); 
     } 

所以电网去,重新获得服务器的方法,耶!但是这一次,服务器发回一个响应,看起来像这样从萤火虫:

{"ContentEncoding":null,"ContentType":null,"Data":{"page":1,"records":2,"rows":[{"id":3,"cell":["\u003c 1 mile","25 hour(s)","sdfgsdfgsdfg","3"]},{"id":2,"cell":["\u003c 1 mile","25 hour(s)","adfg","2"]}],"total":1},"JsonRequestBehavior":1} 

然而,电网不补,仍然说没有记录,当时应该有3

+0

我不确定你是否知道你可以阅读的规则[here](http://stackoverflow.com/faq#howtoask):当你看到你的问题的新答案时,点击向上箭头指向答案的左侧。在许多统计数据中,没有投票的接受答案将不计算(不包括在“总分”中)。一个人没有把答案解释为有用的。你刚刚解决了这个问题。 [这里](http://meta.stackexchange.com/questions/46795/why-are-accepted-answers-not-included-in-the-tag-badge-calculation/)你可以阅读如何解释“总数得分了”。 – Oleg 2011-04-10 21:58:25

回答

1

您可以使用JSON数据不是标准格式,所以你应该包括在jqGrid的相应jsonReader参数,它描述的jqGrid应该如何从JSON输入获取数据:

jsonReader: { 
    page: "Data.page", 
    total: "Data.total", 
    records: "Data.records", 
    root: "Data.rows" 
} 

如何从the demo读取的数据将REA d在改变之后。