2012-03-27 160 views
1

在jqGrid中显示我的json数据时遇到了麻烦。在jqGrid中加载JSON数据

我在这个论坛上搜索了很多,并尝试过各种形式使它工作。我很抱歉,如果这已经得到解答,但我真的需要帮助。

在服务器页面我只是用JavaScriptSerializer发送数据和jsonreader函数的默认参数(这个工作确定)。

我现在需要进行分页,并改变了我的服务器网页代码与SIDXSORD参数工作。

从服务器生成的字符串如下所示:

{"total":"344","page":"1","records":"8577","root":[{"Id":"1","SerialNumber":"132","Name":"ServerName"},...]} 

这里是我的jQuery代码:

$("#list").jqGrid({ 
     datatype: "json", 
     mtype: 'GET', 
     url:'https://server/handlerpage.ashx', 
     colNames:['Id','SerialNumber','Name'], 
     colModel :[   
       {name:'Id', index:'Id', jsonmap:"Id", width:20}, 
       {name:'Name', index:'Name', jsonmap:"Name", width:120}, 
       {name:'SerialNumber', index:'SerialNumber', jsonmap:"SerialNumber", width:100}],  
     jsonreader: {repeatitems:false,id:'Id',root:'root'}, 
     pager: '#pager', 
     rowNum:25, 
     rowList:[25,50,75,100], 
     sortname: 'Id', 
     viewrecords:true, 
     gridview: true, 
     height:"400", 
     width:"700", 
     caption: 'Select from existing server', 
     loadtext:'Loading, please wait' 
     }).navGrid("#pager", { edit: false, add: false, search: true, del: false }); 
+1

您的代码中的主要错误是使用'jsonreader'而不是'jsonReader'。你可以删除所有'jsonmap'属性和'index'。我建议你另外不要使用像''https:// server/handlerpage.ashx'这样的'url'。对应于Ajax [相同来源策略](http://en.wikipedia.org/wiki/Same_origin_policy),您必须使用与当前页面相同的“https:// server /”前缀。所以你最好使用'url:'handlerpage.ashx''或'url:'/ handlerpage.ashx''。 – Oleg 2012-03-27 19:48:03

+0

谢谢Oleg,我测试了jsonReader(大写R),它确实有效。也改变了网址以遵守政策并且也工作。 – fabianmunoz 2012-03-27 21:02:56

+0

不客气!有时候错误非常小(只有一个字母),但正因为如此,可能很难找到它。 – Oleg 2012-03-27 21:09:35

回答

0

请确保服务器端脚本与HEADERS

返回适当的JSON字符串

进一步检查demo网站和JSON示例

+0

我试过应用程序/ json和text/json,但没有解决我的问题。我也尝试过文本/纯文本(这是第一次在分页之前工作),但也没有效果。有趣的是,分页栏工作正常,我可以看到页面数量并更改它们,就像网格不想读取服务器响应的根部分。 – fabianmunoz 2012-03-27 17:53:05

+0

我用过:text/plain,text/json,application/json,它们在更改jsronReader后都工作。谢谢。 – fabianmunoz 2012-03-27 18:40:46

1

尝试使用以下

jsonReader: { 
    root: 'rows', 
    page: 'page', 
    total: 'total', 
    records: 'records', 
    repeatitems: true, 
    cell: 'cell', 
    id: 'id', 
    userdata: 'userdata' 
} 
+0

这也没有工作。我想知道'root':[{...}]是否是错误的,当我在jsonReader中更改根标记'rows'或其他值时,网格会显示加载字符串并停留在那里。 – fabianmunoz 2012-03-27 18:21:24

+0

我改变了一点,它的工作:jsonReader:{根:“行”,页:“页面”,总:“总”,记载:“记录”,repeatitems:假的,ID:“身份证”}谢谢两位种子 – fabianmunoz 2012-03-27 18:39:13

3

为了使用JSON数据作为来自查询的响应必须被正确格式化的响应。很难确定什么是正确的答案,以及如何从文档中获得答案。作为响应的一部分,服务器设置会生成警告,导致网格无法加载,因此可能会出现更多问题。

从文件这是默认的json阅读器,这意味着如果你正确地设置你的响应格式,你不需要添加任何/定制的json阅读器。

jsonReader : { 
    root: "rows", 
    page: "page", 
    total: "total", 
    records: "records", 
    repeatitems: true, 
    cell: "cell", 
    id: "id", 
    userdata: "userdata", 
    subgrid: { 
    root:"rows", 
    repeatitems: true, 
    cell:"cell" 
    } 

首先确保您有正确的响应格式。 {"page":1,"total":1,"records":"2","rows":[{"id":"1","cell":["1","mydata1"]},{"id":"2","cell":["2","mydata2"]}]}

没有在文档页面上给出示例,但如果您的网格中只有两列,则上述内容正确。您需要让服务器查询/解析服务器查询,并将值传递给运行服务器端脚本的页面以返回此格式。文档中的example.php页面为您提供了所需的所有值。

此代码会给你正确的标题,以避免错误警告并与上面的响应相匹配。另请注意,在文档中,它们不会在关联数组索引名称的索引周围添加撇号。那会失败。

header('Content-type: application/json');$responce = new stdClass();$responce->page = $page;$responce->total = $total_pages;$responce->records = $count;$i=0;while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {$responce->rows[$i]['id']=$row['ID'];$responce->rows[$i]['cell']=array($row['ID'],$row['entity_name']); $i++; } echo json_encode($responce); 

老调重弹什么是在文档丢失(这是可能的,我只是错过了他们,即使由于jqGrid的文件是史诗/硕士工作): 1.需要有一个未提及json的头文件声明(用XML示例很明显) 2.没有样本返回的字符串应该看起来像 3.没有正确的关联数组索引格式。 4.没有提及如何避免PHP警告作为响应的一部分返回