Extjs 5.0Удаленная фильтрация; нет возвращаемого значения
В сетке у меня есть табличка с текстовым полем, используемым для фильтрации сетки (удаленной).
Работает нормально.
Однако, если я делаю фильтрацию со словом, которое не существует в базе данных (например, «mywxtyz»), выдает ошибку: Ext.JSON.decode(): вы пытаетесь декодировать недействительную строку JSON , и вывод будет нулевым.
То, что я хотел, было тогда, когда поиск не возвратил никакой записи (не существует в базе данных), было отображено простое сообщение или текст в сетке emptyText или в окне.
как я могу это сделать?
Заранее спасибо.
Мой код:
onButtonFilter : function(button, newValue, oldValue, eOpts){
var me = this;
var textfield = Ext.ComponentQuery.query('#filter')[0];
var grid = Ext.ComponentQuery.query('#griditemId')[0];
var store = grid.getStore();
if (form.isValid()) {
store.proxy.extraParams = {
action : 'filterGrid',
name : textfield.getValue()
},
store.load();
}
}
Пример моего PHP:
<?php
include("conexion.php");
$action = $_REQUEST['action'];
switch($action){
case "create":{
}
case "read":{
$start = $_REQUEST['start'];
$limit = $_REQUEST['limit'];
$statement = $conexao->stmt_init();
$sqlQuery = "SELECT name, email FROM contact LIMIT ?, ?";
$sqlTotal = "SELECT COUNT(name) as num FROM contact";
if(isset($_REQUEST['action']) AND $_REQUEST['action'] == 'filterGrid') {
$name = $_REQUEST['name'];
$sqlQuery = "SELECT name, email
FROM contact
WHERE name like '%$name%'
LIMIT ?, ?";
$sqlTotal = "SELECT COUNT(name) as num
FROM contact
WHERE name LIKE '%$name%'";
}
if ($statement = $conexao->prepare($sqlQuery)){
$statement->bind_param("ii", $start, $limit);
$statement->execute();
$statement->bind_result($col1, $col2);
while($statement->fetch()){
$output[] = array($col1, $col2);
};
if ($statement = $conexao->query($sqlTotal)){
$row = $statement->fetch_row();
$total = $row[0];
}
$sucess = array("success" => mysqli_errno($conexao) == 0);
echo json_encode(array(
"success" => $sucess,
"total" => $total,
"data" => $output
));
$conexao->close();
break;
}
case "update":{
}
case "destroy":{
}
}
?>
Магазин:
Ext.define('APP.store.StoreList', {
extend: 'Ext.data.Store',
itemId:'mystore',
model: 'SPP.model.ModelList',
pageSize: 25,
autoLoad:true,
autoLoad: {start: 0, limit: 25},
autoSync: false,
proxy: {
type: 'ajax',
actionMethods:{
create:'POST',
read:'POST',
update:'POST',
destroy:'POST'
},
api: {
create: 'php/crudActionList.php?action=create',
read: 'php/crudActionList.php?action=read',
update: 'php/crudActionList.php?action=update',
destroy: 'php/crudActionList.php?action=destroy'
},
reader: {
type: 'json',
rootProperty: 'data',
totalProperty:'total',
successProperty: 'success'
},
writer: {
type: 'json',
writeAllFields: true,
encode: true,
rootProperty: 'data'
}
},
});
Thanks JasonMArcher – josei