2012-10-22 37 views
0

Hello StackOverFlow nation。我试图将信息添加到从MySQL数据库中检索的jqGrid。我已经两个文件=> index.html,然后data.php(无论是在相同的目录中)无法从json格式的php中向jqGrid添加数据

index.html的源=>

<script type="text/javascript"> 
$(function(){ 
    $("#jqGrid_tb").jqGrid({ 
     url: "data.php", 
     datatype: "json", 
     sortable: true, 
     height: "auto", 
     colNames: ["Name","Surname","Birth Year","Famous Film"], 
     colModel: [ 
      {name: "name", index: "name", width: "150"}, 
      {name: "surname", index: "surname", width: "150"}, 
      {name: "b_year", index: "year", width: "150"}, 
      {name: "film", index: "film", width: "200"} 
     ], 
     rowNum: 5, 
     rowList: [5,10,15], 
     viewrecords: true, 
     pager: $("#pager"), 
     caption: "Famous Actors", 
    }).navGrid("#pager"); 
}); 
</script> 

<div id="grid"> 
    <table id="jqGrid_tb"></table> 
    <div id="pager"></div> 
</div> 

data.php源=>

include ("JSON.php"); 

$json = new Services_JSON(); 

$con = new mysqli("host","user","pswd","db"); 

if (!$con->connect_errno){ 
    if ($r = $con->query("SELECT * FROM actors")){ 
     while ($row = $r->fetch_assoc()){ 
      $info[] = array(
       "name" => $row[name], 
       "surname" => $row[surname], 
       "b_year" => $row[b_year], 
       "film" => $row[film], 
      ); 
     } 
     $r->free(); 
    } 
} 

echo $json->encode($info); 

if (isset($con)){ 
    $con->close(); 
} 

jqGrid在index.html文件中显示时没有任何信息,当打开data.php文件信息被成功编码为JSON格式时,最新的错误我无法理解。请帮助,谢谢...

回答

1

您的回复格式不正确。你可以去jqGrid Demos页面,在这里你可以找到一个PHP/MySQL的示例。Loading Data然后选择JSON数据

数据的正确格式应该是这样的:

{ 
    "total": "1", 
    "page": "1", 
    "records": "2", 
    "rows": [ 
     { "name": "Robert", "surname": "De Niro", "b_year": "1943", "film": "Once Upon A Time In America" }, 
     { "name": "Al", "surname": "Pacino", "b_year":"1971", "film": "Scent Of A Woman"} 
    ] 
} 

其中:

  • total - >总页面数
  • page - >当前页码
  • records - >总记录数
  • rows - >数据

另外如果你想行成为对象的行,你需要的jqGrid禁用repeatitemsjsonReader选项:

$("#jqGrid_tb").jqGrid({ 
    ... 
    jsonReader: { repeatitems: false } 
}); 

它也劝了行具有独特id供以后参考。

+0

这种格式错了=> [{“姓名”:“罗伯特”,“姓氏”:“德尼罗”,“b_year”:“1943”,“电影”:“从前在美国”}, {“name”:“Al”,“surname”:“Pacino”,“b_year”:“1971”,“电影”:“女人的香味”}]? – tnanoba

+0

@Tornike我已经更新了答案。 – tpeczek

+0

所以每次我点击网格或排序或任何它是从data.php文件请求关于'total','page','records'和'rows'的信息是? – tnanoba

1

你应该包括

jsonReader: { 
    repeatitems: false, 
    root: function (obj) { return obj; }, 
    page: function (obj) { return 1; }, 
    total: function (obj) { return 1; }, 
    records: function (obj) { return obj.length; } 
} 

的jqGrid的额外选项,你不想改变输入数据的格式。此外,您应该指定哪些值应将jqGrid分配为该行的id属性。您可以将其他id属性作为每个退回项目的附加属性,也可以将key: true属性添加到包含唯一值的列(colModel)中。例如,如果您可以保证"name"的值已经是唯一的,那么您可以在"name"列的定义中包含key: true属性。

此外,您可以考虑使用jqGrid的loadonce: true选项。在网格的全部数据将被立即加载的情况下,数据的排序,寻呼和搜索(过滤)将由jqGrid在客户端上实现,而不需要在服务器端实现一些额外的代码。如果网格中有大量行(数百行或数千行),则不应使用该选项。