ExtJS 5.1,使用 PHP 从数据库加载数据
ExtJS 5.1, grid load data from database with PHP
我正在学习 Ext JS 5.1 的在线课程,在本练习中我有一个 service.php
文件连接到数据库和 returns JSON 数据。我尝试显示此数据,但它从未显示(在 firebug 中未显示任何错误消息)并且我找不到代码的问题所在。
这是商店的代码:
var storeUsuario = Ext.create('Ext.data.Store', {
model : 'js.clase.Usuario',
proxy: {
type: 'rest',
url: 'service.php?method=getUsuarios',
reader: {
type: 'json',
}
},
autoLoad: true
});
这是网格的代码:
Ext.create('Ext.grid.Panel', {
renderTo: Ext.getBody(),
store: storeUsuario,
width: 600,
height: 400,
title: 'Grid Usuarios',
columns: [
{
text: 'id',
dataIndex: 'id'
},{
text: 'nombre',
width: 100,
dataIndex: 'nombre'
},{
text: 'apellidos',
dataIndex: 'apellidos'
},{
text: 'email',
dataIndex: 'email'
},{
text: 'nacionalidad',
dataIndex: 'nacionalidad'
},{
text: 'rutaAvatar',
dataIndex: 'rutaAvatar'
}
]
});
和service.php
方法:
<?php
header('Content-Type: text/html; charset=utf-8');
$conexion = mysql_connect("127.0.0.1", "root", "");
mysql_select_db("usertest", $conexion);
$method = $_GET['method'];
switch($method) {
case "getUsuarios":
$query = "SELECT * FROM Usuario ORDER BY id ASC";
$result = mysql_query($query, $conexion) or die(mysql_error());
$numRows = mysql_num_rows($result);
$usuarios = array();
if ($numRows > 0) {
$i = 0;
while ($row = mysql_fetch_assoc($result)) {
$usuarios[$i] = $row;
$i++;
}
}
$usuariosJSON = json_encode($usuarios);
echo $usuariosJSON;
break;
}
?>
您的 PHP 代码 return 不是有效的 JSon。
看到这个 fiddle 工作正常:https://fiddle.sencha.com/#fiddle/q9k
根据 this post 你应该指定 header.
我建议你 return a "hand formed" json 像这样:
$data = /** whatever you're serializing **/;
$data_length = /* the length of the result according to the request response */;
header('Cache-Control: no-cache, must-revalidate'); // just to be sure
header('Content-Type: application/json');
echo "{ \"success\": true, \"total\": $data_length, \"records\": " . json_encode($data) . " }";
json 数据可能需要 []
...
echo "{ \"success\": true, \"total\": $data_length, \"records\": [ " . json_encode($data) . " ] }";
我正在学习 Ext JS 5.1 的在线课程,在本练习中我有一个 service.php
文件连接到数据库和 returns JSON 数据。我尝试显示此数据,但它从未显示(在 firebug 中未显示任何错误消息)并且我找不到代码的问题所在。
这是商店的代码:
var storeUsuario = Ext.create('Ext.data.Store', {
model : 'js.clase.Usuario',
proxy: {
type: 'rest',
url: 'service.php?method=getUsuarios',
reader: {
type: 'json',
}
},
autoLoad: true
});
这是网格的代码:
Ext.create('Ext.grid.Panel', {
renderTo: Ext.getBody(),
store: storeUsuario,
width: 600,
height: 400,
title: 'Grid Usuarios',
columns: [
{
text: 'id',
dataIndex: 'id'
},{
text: 'nombre',
width: 100,
dataIndex: 'nombre'
},{
text: 'apellidos',
dataIndex: 'apellidos'
},{
text: 'email',
dataIndex: 'email'
},{
text: 'nacionalidad',
dataIndex: 'nacionalidad'
},{
text: 'rutaAvatar',
dataIndex: 'rutaAvatar'
}
]
});
和service.php
方法:
<?php
header('Content-Type: text/html; charset=utf-8');
$conexion = mysql_connect("127.0.0.1", "root", "");
mysql_select_db("usertest", $conexion);
$method = $_GET['method'];
switch($method) {
case "getUsuarios":
$query = "SELECT * FROM Usuario ORDER BY id ASC";
$result = mysql_query($query, $conexion) or die(mysql_error());
$numRows = mysql_num_rows($result);
$usuarios = array();
if ($numRows > 0) {
$i = 0;
while ($row = mysql_fetch_assoc($result)) {
$usuarios[$i] = $row;
$i++;
}
}
$usuariosJSON = json_encode($usuarios);
echo $usuariosJSON;
break;
}
?>
您的 PHP 代码 return 不是有效的 JSon。
看到这个 fiddle 工作正常:https://fiddle.sencha.com/#fiddle/q9k
根据 this post 你应该指定 header.
我建议你 return a "hand formed" json 像这样:
$data = /** whatever you're serializing **/;
$data_length = /* the length of the result according to the request response */;
header('Cache-Control: no-cache, must-revalidate'); // just to be sure
header('Content-Type: application/json');
echo "{ \"success\": true, \"total\": $data_length, \"records\": " . json_encode($data) . " }";
json 数据可能需要 []
...
echo "{ \"success\": true, \"total\": $data_length, \"records\": [ " . json_encode($data) . " ] }";