extjs 4:通过PHP脚本使用MYSQL db填充组合框

时间:2013-02-25 13:16:25

标签: php mysql extjs combobox

您好我正在尝试使用来自MYSQL数据库的数据填充组合框。将Extjs 4与MVC架构结合使用。

以下是我视图中的组合框配置:

         ...
         {
            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

}

?>

我不知道错误是什么或错误来自何处,但我的组合框从未被填充过。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

两件事:

  • 当你定义一个id属性/字段时,它似乎喜欢它,它默认为id。您应该将主键添加到sql查询中,并将其返回到别名或命名为“id”的数据中,或者更改代理的idProperty以匹配您发送的名称。
  • ExtJS希望你的json的格式类似于你如何定义代理     
    {
        "success": true,
        "message": "OK",
        "data": [
            {
                "id": 1,
                "name_metric": "Value1"
            },
            {
                "id": 2,
                "name_metric": "Value2"
            }
        ]
    }
    这意味着你的函数应该只返回数据数组,而不是编码的数组,而php输出应该是这样的:
        echo json_encode(array(
            'success' => true,
            'message' => "OK",
            'data' => metricsName()
    ));
  • 最后,组合框定义已关闭。您需要至少提供一个valueField定义并创建一个商店实例,而不是传递它的名称
    {
        xtype: 'combobox',
        store: Ext.create("Metrics.store.MetricsData"),
        displayField: 'name_metric',
        valueField: 'id'
    }