簡體   English   中英

extjs 4:通過PHP腳本使用MYSQL db填充組合框

[英]extjs 4 : filling combobox using MYSQL db via PHP script

您好,我正在嘗試使用來自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

}

?>

我不知道出了什么問題或錯誤是從哪里來的,但是我的組合框從未裝滿。 任何幫助將非常感激。

您需要在最后返回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
}

兩件事情:

  • 當您定義id屬性/字段時,Ext似乎很喜歡它,它默認為id。 您應該將主鍵添加到sql查詢中,並在別名為“ id”或名為“ id”的數據中返回主鍵,或者更改代理的idProperty以匹配您發送的名稱。
  • ExtJS希望您的json的格式類似於給定的代理定義方式
      {\n     “成功”:是的,\n     “ message”:“確定”,\n     “數據”:[\n         {\n             “ id”:1\n             “ name_metric”:“ Value1”\n         },\n         {\n             “ id”:2\n             “ name_metric”:“ Value2”\n         }\n     ]\n } 
    這意味着您的函數應該只返回數據數組,而不是編碼數組,而php應該輸出如下內容:
      回聲json_encode(array(\n         '成功'=>是的,\n         'message'=>“確定”,\n         '數據'=> metricsName()\n )); 
  • 最后,組合框定義已關閉。 您需要至少提供一個valueField定義並創建商店的實例,而不是傳遞其名稱
      {\n     xtype:'combobox',\n     商店:Ext.create(“ Metrics.store.MetricsData”),\n     displayField:'name_metric',\n     valueField:'id'\n }\n\n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM