フォームとグリッドがあります。ユーザーはフォームフィールドにデータを入力してから、関連するレコードをグリッドに表示する必要があります。検索フォームを実装したいと思います。たとえば、ユーザーが学生の名前と性別を入力すると、同じ名前と性別のすべての学生のグリッドが表示されます。
そこで、ajaxを使用してフォームフィールドの値をPHPに送信してから、グリッドストアで使用されるjson_encodeを作成します。
私の考えが良いかどうかは本当にわかりません。しかし、私はそれを行う別の方法を見つけていません。
問題は、ストアでautoLoadをtrueに設定すると、グリッドに、ユーザーが要求したものだけでなく、すべてのデータが自動的に入力されることです。
したがって、autoLoadをfalseに設定する必要があることは理解していますが、結果はファイアバグで正常に返されてもグリッドに表示されません。
どうしたらいいのかわからない。
私の見解
{
xtype: 'panel',
layout: "fit",
id: 'searchResult',
flex: 7,
title: '<div style="text-align:center;"/>SearchResultGrid</div>',
items: [{
xtype: 'gridpanel',
store: 'advSearchStore',
id: 'AdvSearch-grid',
columns: [{
xtype: 'gridcolumn',
dataIndex: 'name',
align: 'right',
text: 'name'
},
{
xtype: 'gridcolumn',
dataIndex: 'gender',
align: 'right',
text: 'gender'
}
],
viewConfig: {
id: 'Arr',
emptyText: 'noResult'
},
requires: ['MyApp.PrintSave_toolbar'],
dockedItems: [{
xtype: 'PrintSave_tb',
dock: 'bottom',
}]
}]
},
私の店とモデル
Ext.define('AdvSearchPost', {
extend: 'Ext.data.Model',
proxy: {
type: 'ajax',
url: 'AdvSearch.php',
reader: {
type: 'json',
root: 'Arr',
totalProperty: 'totalCount'
}
},
fields: [{
name: 'name'
}, {
name: 'type_and_cargo'
}]
});
Ext.create('Ext.data.Store', {
pageSize: 10,
autoLoad: false,
model: 'AdvSearchPost',
storeId: 'AdvSearchPost'
});
私のコントローラー
xmlhttp.open("GET", "AdvSearch.php?search_name=" + search_name, true);
xmlhttp.send(null);
私のPHPスクリプト
if (!$con) {
throw new Exception("Error in connection to DB");
}
$query = "SELECT name, gender FROM students WHERE name ILIKE '%$search_name%' ";
$result = pg_query($query);
while ($row = pg_fetch_array($result)) {
$Arr[] = array('name' => $row[0], 'gender' => $row[1]);
}
$searchResult_list = array();
$searchResult_list['success'] = true;
$searchResult_list['Arr'] = $Arr;
$searchResult_list['totalCount'] = count($searchResult_list['Arr']);
echo json_encode($searchResult_list);
if (!$result)
die("Error in query: ".pg_last_error());
pg_close($con);