简体   繁体   中英

jqGrid doesn't show data

I can't get to load data from a database with jqgrid. I used the demo code on the wiki (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:first_grid) and it works, but when I try to load info from my own database it simply doesn't work.

I used the demo code and changed it according to the table I want to use, to see if I coded something wrong the first time, and it didn't work.

index.html:

<script src="js/jquery-1.5.2.min.js" type="text/javascript"></script>
<script src="js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>

<script type="text/javascript">
$(function(){ 
$("#list").jqGrid({
url:'dades.php',
datatype: 'xml',
mtype: 'GET',
colNames:['Id','Nom', 'Email','Poblacio','Naixement','Tel'],
colModel :[ 
{name:'id', index:'id', width:55}, 
{name:'nom', index:'nom', width:90}, 
{name:'email', index:'email', width:80, align:'right'}, 
{name:'poblacio', index:'poblacio', width:80, align:'right'}, 
{name:'naixement', index:'naixement', width:80, align:'right'}, 
{name:'tel', index:'tel', width:150, sortable:false} 
],
pager: '#pager',
rowNum:10,
rowList:[10,20,30],
sortname: 'id',
sortorder: 'desc',
viewrecords: true,
gridview: true,
caption: 'My first grid'
}); 
}); 
</script>

</head>
<body>
<table id="list"><tr><td/></tr></table> 
<div id="pager"></div> 
</body>

</html>

dades.php:

<?php 
//include the information needed for the connection to MySQL data base server. 
// we store here username, database and password 

include("dbconfig.php");

// to the url parameter are added 4 parameters as described in colModel
// we should get these parameters to construct the needed query
// Since we specify in the options of the grid that we will use a GET method 
// we should use the appropriate command to obtain the parameters. 
// In our case this is $_GET. If we specify that we want to use post 
// we should use $_POST. Maybe the better way is to use $_REQUEST, which
// contain both the GET and POST variables. For more information refer to php documentation.
// Get the requested page. By default grid sets this to 1. 
$page = $_GET['page']; 

// get how many rows we want to have into the grid - rowNum parameter in the grid 
$limit = $_GET['rows']; 

// get index row - i.e. user click to sort. At first time sortname parameter -
// after that the index from colModel 
$sidx = $_GET['sidx']; 

// sorting order - at first time sortorder 
$sord = $_GET['sord']; 

// if we not pass at first time index use the first column for the index or what you want
if(!$sidx) $sidx =1; 

// connect to the MySQL database server 
$db = mysql_connect($dbhost, $dbuser, $dbpassword) or die("Connection Error: " . mysql_error()); 

// select the database 
mysql_select_db($database) or die("Error connecting to db."); 

// calculate the number of rows for the query. We need this for paging the result 
$result = mysql_query("SELECT COUNT(*) AS count FROM llista"); 
$row = mysql_fetch_array($result,MYSQL_ASSOC); 
$count = $row['count']; 

// calculate the total pages for the query 
if( $count > 0 && $limit > 0) { 
              $total_pages = ceil($count/$limit); 
} else { 
              $total_pages = 0; 
} 

// if for some reasons the requested page is greater than the total 
// set the requested page to total page 
if ($page > $total_pages) $page=$total_pages;

// calculate the starting position of the rows 
$start = $limit*$page - $limit;

// if for some reasons start position is negative set it to 0 
// typical case is that the user type 0 for the requested page 
if($start <0) $start = 0; 

// the actual query for the grid data 
$SQL = "SELECT id,nom,email,poblacio,naixement,tel FROM llista ORDER BY $sidx $sord LIMIT $start , $limit"; 
$result = mysql_query( $SQL ) or die("Couldn't execute query.".mysql_error()); 

// we should set the appropriate header information. Do not forget this.
header("Content-type: text/xml;charset=utf-8");

$s = "<?xml version='1.0' encoding='utf-8'?>";
$s .=  "<rows>";
$s .= "<page>".$page."</page>";
$s .= "<total>".$total_pages."</total>";
$s .= "<records>".$count."</records>";

// be sure to put text data in CDATA
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
    $s .= "<row id='". $row['id']."'>";            
    $s .= "<cell>". $row['id']."</cell>";
    $s .= "<cell>". $row['nom']."</cell>";
    $s .= "<cell>". $row['email']."</cell>";
    $s .= "<cell>". $row['poblacio']."</cell>";
    $s .= "<cell>". $row['naixement']."</cell>";
    $s .= "<cell>". $row['tel']."</cell>";
    $s .= "</row>";
}
$s .= "</rows>"; 

echo $s;
?>

Anybody here know why it dodn't work?

(EDIT)

For the tests I done, it seems that de problem is in the GET part:

$page = $_GET['page']; 

// get how many rows we want to have into the grid - rowNum parameter in the grid 
$limit = $_GET['rows']; 

// get index row - i.e. user click to sort. At first time sortname parameter -
// after that the index from colModel 
$sidx = $_GET['sidx']; 

// sorting order - at first time sortorder 
$sord = $_GET['sord']; 

// if we not pass at first time index use the first column for the index or what you want
if(!$sidx) $sidx =1; 

it seems that it doesn't work, but i don't understand why.

(EDIT 2)

It seems that the GET part don't work so I ended up doing without it, and the big problem was in the wrong UTF in the database...so changing the database character set and the GETs it works flawlessly.

for one thing, you haven't changed the result set count query.

 // calculate the number of rows for the query. We need this for paging the result 
    $result = mysql_query("SELECT COUNT(*) AS count FROM invheader"); 

you still need to update this to

// calculate the number of rows for the query. We need this for paging the result 
$result = mysql_query("SELECT COUNT(*) AS count FROM llista"); 

also, you shouldn't need content in the html table:

<table id="list"></table> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM