combo动态加载数据:页面没有数据传过来
以前我是用AJAX 动态加载 代码如下
前台页面:
$.ajax({
url : "get_ESB_META_DATA.do",
type : 'POST',
dataType : 'json',
success : function(data) {
$.each(data.rows, function(j) {

var METAID = data.rows[j].METAID;
var METANM = data.rows[j].METANM;
$("#REQ_META").append("<option value='"+METAID+"'>" +METAID+"-"+ METANM+ "</option>");
$("#RSP_META").append("<option value='"+METAID+"'>" +METAID+"-"+ METANM+ "</option>");
});
}
}); 
后台controller:
public ModelAndView process(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String url = request.getRequestURI();
JSONObject data = new JSONObject();
try {
logger.info("META_DATA已经执行 ajax");
List<ESB_META_DATA_DEF_Bean> ESB_META_DATA_DEFs = ESB_META_DATA_DEF_Bean
.getAll_ESB_META_DATA_DEF();
JSONArray array = new JSONArray();
JSONObject tmp = null;
for (int i = 0; i < ESB_META_DATA_DEFs.size(); i++) {
tmp = new JSONObject();
ESB_META_DATA_DEF_Bean eSB_META_DATA_DEF = ESB_META_DATA_DEFs.get(i);
tmp.put("METAID", eSB_META_DATA_DEF.getMETAID());
tmp.put("METANM", eSB_META_DATA_DEF.getMETANM());
logger.info("META_DATA已经执行_返回数据="+tmp);
//无论我是用以前的ajax 还是store的ajax 都有数据显示
array.put(tmp);
}
data.put(TOTAL, ESB_META_DATA_DEFs.size());
data.put(ROWS, array);
response.getWriter().write(data.toString());
// } } catch (Exception e) {
logger.error(e.getMessage(), e);
data.put(ERROR_MSG, e.getMessage());
response.getWriter().print(data.toString());
}
return null;
}

}
现在我改成了combo加载 ext.data.store也是用ajax具体代码如下
前台页面:panel部分
            field: {
                xtype: 'combo',
                store: demoStore
            }
sotre部分:
demoStore = Ext.create('Ext.data.Store', {
    autoLoad: true,//是否自动加载
    autoSync: true,//是否自动同步
  fields :[{
          name : 'data',
      //    type : 'String'
       }],
    proxy : {
  
        type : 'ajax',// 使用ajax请求
         url :'get_ESB_META_DATA.do',// 请求后台读取数据的地址
        // 读取数据的工具(数据代理)     }
});
demoStore.load();
后台代码没有变

解决方案 »

  1.   

    Ext.define('EMS.ux.TimeUnitCombo', {
        extend: 'Ext.form.field.ComboBox',
        alias: 'widget.uxtimeunit',    fieldLabel: '时间单位', displayField: 'unitName', valueField: 'unitValue', labelWidth: 60, width: 110, editable: false, queryMode: 'local',    store: Ext.create('Ext.data.JsonStore', {
            fields: ['unitName', 'unitValue'],
            data: [
                { unitName: '秒', unitValue: Ext.Date.SECOND },
                { unitName: '分', unitValue: Ext.Date.MINUTE },
                { unitName: '时', unitValue: Ext.Date.HOUR },
                { unitName: '日', unitValue: Ext.Date.DAY }
            ]
        })
    });这是我写的一个静态数据的combo我想你这里的问题是出在displayField: 'unitName', valueField: 'unitValue', 没有指定它的显示名字,和value名字所以你自己对应你自己的data数据指定一下,‘data’就可以了
      

  2.   

    主要是我store里面没有数据啊
      

  3.   

    这是后台代码ashx<%@ WebHandler Language="C#" Class="Handler" %>using System;
    using System.Web;public class Handler : IHttpHandler
    {    public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write("{\"records\":[{\"value\":\"value1\"},{\"value\":\"value2\"},{\"value\":\"value3\"}]}");
        }    public bool IsReusable
        {
            get
            {
                return false;
            }
        }}
    以下是前段代码了自己看吧哪里不对了
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script src="ext.js"></script>
        <script src="ext-all-debug.js"></script>
        <link rel="stylesheet" type="text/css" href="ext-all-gray.css" />
    </head>
    <body>
        
    </body>
    <script>    Ext.create('Ext.form.field.ComboBox', {
            fieldLabel: '时间单位', displayField: 'value', valueField: 'value', labelWidth: 60, width: 110, editable: false, queryMode: 'local',
            renderTo: Ext.getBody(),
            
            store: Ext.create('Ext.data.Store', {
                autoLoad: true, //是否自动加载
                autoSync: true, //是否自动同步
                fields: [
                    { name: 'value' }
                ],
                proxy: {
                    type: 'ajax',
                    url: 'Handler.ashx',
                    reader: {
                        type: 'json',
                        root: 'records'
                    }
                },
                autoLoad: true
            })
        });
    </script>
    </html>
      

  4.   

    你以前后台 输出的是一个json的一个字符串, 所以你绑定下拉框是可以的,但是 combo 不一样,他需要指定一个json的对象 你后台应该是返回一个object 也就是说你执行完ajax之后 alert下你的回调涵数的data参数是不是正确的object 例如你Controllers 应该大致是这样
          public JsonResult CheckCreateSKULogtry()
            {
                //检查SKU是否已经上架
                //根据输入的SKU计划出对应的proudctid
                string sku = Request["sku"].ToString();
                return Json(_productService.CheckCreateSKULogtry(sku), JsonRequestBehavior.AllowGet);
            }