【问题标题】:extjs 4 : filling combobox using MYSQL db via PHP scriptextjs 4:通过 PHP 脚本使用 MYSQL db 填充组合框
【发布时间】:2013-02-25 22:13:09
【问题描述】:

您好,我正在尝试使用来自 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

}

?>

我不知道出了什么问题或错误来自何处,但我的组合框从未填满。任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql extjs combobox


    【解决方案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
    }
    

    【讨论】:

    • 谢谢!!但我也遇到了与数据库连接的问题,我用这个解决了这个问题:stackoverflow.com/questions/1575807/…
    • 好,你最好先直接进入你的php页面测试你的脚本,这样你就知道它输出了正确的数据,回显解决了你的问题吗?
    【解决方案2】:

    两件事:

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

    【讨论】:

    • 谢谢!这很有帮助!
    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多