【问题标题】:ExtJs 4 - combobox with jsonstore stays emptyExtJs 4 - 带有 jsonstore 的组合框保持为空
【发布时间】:2014-03-16 19:08:18
【问题描述】:

我正在尝试使用 jsonStore 将 json 数据加载到我的组合框。 商店正在使用 PHP 从服务器中检索数据。

我可以看到服务器正在使用正确的 json 数据处理 PHP 请求和响应,但不知何故组合框保持为空。

相关代码:

商店和 ComboBox - ComboBox 在 FormPanel 内:

var groupsStore= new Ext.data.JsonStore({url:'login.php?action=getGroups',
    root: 'entities',
    fields: [{name:'groupName', mapping:'groupName'}]
});

LoginWin = function(cfg) {

this.form = new Ext.form.FormPanel({
    labelWidth:60, baseCls:'x-plain', autoHeight:true, style:'padding:5px',
    items:[
        {xtype:'combo', name:'groups', fieldLabel:'Group', store:groupsStore, 
displayField:'groupName', valueField:'groupName', emptyText:'Pick group...',    mode:'remote', anchor:'95%', allowBlank:false, enableKeyEvents:true, triggerAction:'all', forceSelection:true
        , listeners:{keypress:{scope:this, fn:function(fld,e){ if(e.getKey()==e.ENTER) doLogin();}}
         }}
    ]
});

服务器返回的json数据:

{"entities":[{"@type":"webGroup","groupId":"1","groupName":"TEST","groupUsers":
 [{"groupUserId":"2","groupUserName":"FOO","password":"123456"},
 {"groupUserId":"1","groupUserName":"FOO","password":"654321"}],"system":"BLA"},
 {"@type":"webGroup","groupId":"2","groupName":"TESTOS","system":"BLA"}]
,"success":"true"}

PHP 代码:

function getGroups(){
    error_log("API_host: ".$API_host, 0);
    global $API_host;
    error_log("API_host: ".$API_host, 0);

    $url="$API_host/GroupUser/groups";
    error_log("url: ".$url, 0);
    $jsonData = curl_request($url);

    if (!$jsonData) die("{success:false, message:'Connection Error'}");

    echo $jsonData;
}

也许从 PHP 返回的数据不是 JSON 格式的?我怎么知道?我什么都不确定。

不明白为什么它不起作用。

有什么想法吗?

非常感谢。

【问题讨论】:

    标签: php extjs combobox jsonstore


    【解决方案1】:

    它们应该是您的 json 响应中的 groups 或将组合名称更改为 groupName

    【讨论】:

    • 不明白你的意思。组应该在哪里?并将 groupName 更改为什么?
    • 我的意思是说组合框中的“名称”配置是“组”,这不是他们在 json 响应中的。实际上,响应是根据设置时组件的“名称”配置映射的.
    • 它没有帮助。我试图将“名称”配置更改为“组名”并将其删除。在这两种情况下,结果都是一样的,组合框中没有数据。 'displayField' 和 'valueField' 不是用来做这个映射的吗?
    • 不,如果comboStore,即这里的'groupsStore',没有你试图在combo中设置的值,它不会因为你有forceSelection:true。
    • 这很奇怪,因为如果我使用与“名称”配置相同的组合框作为“组”并且只使用一个简单的数据存储而不是 jsonStore,将其配置为 json 阅读器等,它工作正常。我想知道有什么区别。
    【解决方案2】:

    好的。发现问题了。

    这是我的 php 代码。

    除了函数“getGroups”之外,该 php 文件还包括一个 html 页面,该页面使用组合框加载 formPanel。

    因此,每当我尝试加载以存储到组合框中时,它都会从头开始使用 formPanel 和组合框加载整个 html - 这会使我的存储数据消失。

    当我将商店的 url 设置为包含相同代码但没有 html 块的其他 php 文件时,商店会正确加载其数据并且一切正常!

    我真傻:(

    希望将来能对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 2020-07-03
      • 2014-08-12
      • 1970-01-01
      • 2021-12-01
      • 2017-01-31
      • 2011-02-28
      • 2011-11-13
      • 1970-01-01
      相关资源
      最近更新 更多