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();
后台代码没有变
以前我是用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();
后台代码没有变
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’就可以了
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>
public JsonResult CheckCreateSKULogtry()
{
//检查SKU是否已经上架
//根据输入的SKU计划出对应的proudctid
string sku = Request["sku"].ToString();
return Json(_productService.CheckCreateSKULogtry(sku), JsonRequestBehavior.AllowGet);
}