2014-02-17 37 views
0

我想使用jsonStore将json数据加载到我的组合框。 商店使用PHP从服务器检索数据。ExtJs 4 - 与jsonstore的组合框保持为空

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

相关代码:

商店和组合框 - 组合框里面FormPanel中:

{"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代码:

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数据:

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返回的数据?我怎么知道它?我不确定任何事情。

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

任何想法的人?

非常感谢。

回答

0

好的。发现问题。

这是我的PHP代码。

除了函数'getGroups'之外,php文件还包含一个加载formPanel和组合框的html页面。

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

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

我傻:(

希望这将帮助别人的未来。

0

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

+0

不能明白你的意思。如果要组?并更改组名称是什么? – yanivsh

+0

我的意思是说你的组合框中的'name'配置是'groups',而不是它们在json响应中。当设置时,repsonse根据组件的'name'配置映射。 – Dev

+0

它没有帮助。将'name'配置更改为'groupName',并将其删除。在这两种情况下,结果都是相同的,组合框中没有数据。'displayField'和'valueField'用于执行此操作映射? – yanivsh