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

两件事情:

  • 当您定义 id 属性/字段时,Ext 似乎喜欢它,它默认为 id。您应该将主键添加到您的 sql 查询中,并在别名或命名为“id”的数据中返回它,或者更改代理的 idProperty 以匹配您发送的名称。
  • ExtJS 期望您的 json 采用类似这样的格式,因为您定义了该代理
    {
        “成功”:是的,
        “消息”:“好的”,
        “数据”: [
            {
                “身份证”:1,
                “name_metric”:“Value1”
            },
            {
                “身份证”:2,
                “name_metric”:“Value2”
            }
        ]
    }
    这意味着您的函数应该只返回数据数组,而不是编码的数组,并且 php 的输出应该是这样的:
        回声 json_encode(数组(
            '成功' => 真,
            '消息' => "好的",
            '数据' => 指标名称()
    ));
  • 最后,组合框定义关闭。您需要至少提供一个 valueField 定义并创建商店的实例,而不是传递它的名称
    {
        xtype: '组合框',
        存储:Ext.create("Metrics.store.MetricsData"),
        displayField: 'name_metric',
        值字段:'id'
    }
    
    
于 2013-02-25T14:13:09.727 回答