0

こんにちは、MYSQL データベースからのデータをコンボボックスに入力しようとしています。MVC アーキテクチャで Extjs 4 を使用する。

ビュー内のコンボボックス構成は次のとおりです。

         ...
         {
            xtype: 'combobox',
            id: 'cmbMetric',
            name: 'metr',
            mode: 'queryMode',
            querymode : 'lcoal',
            fieldLabel: 'Metric',
            store: 'MetricsData',
            editable: false,
            valign : 'middle',
            margin : 15

        }
        ....

私の店 :

Ext.define('Metrics.store.MetricsData', {
extend: 'Ext.data.Store',
model: 'Metrics.model.MetricsData',
autoLoad: true,
proxy : {
    type : 'ajax',
    actionMethods : 'POST',
    api : {
    read : 'testmysql.php'
    },
    reader: {
        type: 'json',
        successProperty: 'success',
        messageProperty: 'message',
        root: 'data'
    }
}
});

私のモデル:

Ext.define('Metrics.model.MetricsData', {
extend: 'Ext.data.Model',
fields: [{name : 'name_metric'}]    
});

最後に私のPHPスクリプト:

<?php   

//database parameters
$user='user'; 
$pw='';
$db='mydb';
$table='metric';

//make database connection
$connection = mysql_connect("localhost", $user, $pw) or
die("Could not connect: " . mysql_error());
mysql_select_db($db) or die("Could not select database");

metricsName();

function metricsName() 
{
$sql = 'SELECT name_metric FROM metric';

$result = mysql_query($sql); // result set

while($rec = mysql_fetch_array($result, MYSQL_ASSOC)){
    $arr[] = $rec;
};

$data = json_encode($arr);  //encode the data in json format

}

?>

何が問題なのか、どこからエラーが発生しているのかわかりませんが、コンボボックスがいっぱいになりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

echo最後にを返す必要があります$data

$data = json_encode($arr);  //encode the data in json format
echo $data;

また、返されるデータは次のようになります。

{
    data: [{ 
              name_metric: 'record1' 
          }, { 
              name_metric: 'record2' 
          }],
    total: 2,
    success: true
}
于 2013-02-25T14:04:00.767 に答える
0

2つのこと:

  • id プロパティ/フィールドを定義すると、Ext が気に入ったようです。デフォルトは id です。主キーを SQL クエリに追加し、別名または「id」という名前のデータで返すか、送信した名前と一致するようにプロキシの idProperty を変更する必要があります。
  • ExtJS は、プロキシがどのように定義されているかを考えると、json がこのような形式であると想定しています。
    {
        「成功」:真、
        "メッセージ": "OK",
        "データ": [
            {
                "ID": 1,
                "name_metric": "Value1"
            }、
            {
                "ID": 2,
                "name_metric": "Value2"
            }
        ]
    }
    つまり、関数はエンコードされたものではなくデータ配列のみを返す必要があり、php の出力は次のようになります。
        echo json_encode(配列(
            「成功」 => 真、
            'メッセージ' => "OK",
            'データ' => メトリクス名()
    ));
  • 最後に、コンボ ボックスの定義をオフにします。名前を渡すのではなく、少なくとも valueField 定義を提供し、ストアのインスタンスを作成する必要があります。
    {
        xtype: 'コンボボックス',
        ストア: Ext.create("Metrics.store.MetricsData"),
        displayField: 'name_metric',
        値フィールド: 'id'
    }
    
    
于 2013-02-25T14:13:09.727 に答える