我无法在EXTJS中显示多选框中的条目。下面是我的EXTJS多选和相应面板的代码:
var selectTrain = [{
bodyStyle: 'padding:10px;',
items:[{
xtype: 'multiselect',
fieldLabel: 'Multiselect',
name: 'multiselect',
width: 250,
height: 200,
id: 'selectTrain',
store: new Ext.data.JsonStore({
type: 'ajax',
url:'http://abc.com/xyz',
reader: 'json',
autoLoad:true
}),
ddReorder: true
}]
}];
// combine all that into one huge form
var fp = new Ext.FormPanel({
title: '',
frame: true,
labelWidth: 300,
width: 800,
renderTo:'report',
bodyStyle: 'padding:0 10px 0;',
items: [
{
layout: 'column',
border: false,
// defaults are applied to all child items unless otherwise specified by child item
defaults: {
columnWidth: '1',
border: false
},
items: [selectTrain]
},
],
buttons: [{
text: 'Go',
handler: function(){}
},{
text: 'Reset',
handler: function(){
fp.getForm().reset();
}
}]
});
我可以点击servlet的URL,并看到下面的http://abc.com/xyz正在Firebug控制台上编写:
{"54850":"5.1(1t)d1(3)","54852":"5.1(1t)a2(3)","54853":"5.1(1t)l2(1)","54841":"1.2(4)S1(1)","54789":"5.3(1)T","54849":"5.1(1t)s1(2)","54854":"5.1(1t)l2(5)","54855":"5.1(1t)s2(6)","54847":"1.1(12a)SG"}
http://abc.com/xyz的servlet代码是:
PrintWriter out = response.getWriter();
JSONObject jsonObj=new JSONObject();
for (Iterator iterator = allRelInfoPools.iterator(); iterator
.hasNext();) {
Vector v = (Vector) iterator.next();
jsonObj.put((String)v.get(0),(String)v.get(1));
}
out.println(jsonObj);
请告诉我,我哪里错了?
发布于 2012-05-24 13:31:13
您可能正在尝试发出跨域AJAX请求(例如,您的应用程序是从http://def.com/加载的,但您正在尝试从http://abc.com/xyz加载JSON )。不幸的是,这是不允许的。
但是,您可以使用JSONP请求而不是AJAX请求。JSONP所做的是将一个脚本标记注入到DOM中,它将强制DOM下载一个JavaScript文件,该文件将在其中保存您的JSON数据。然后,您应该能够检索您的数据。
幸运的是,EXTJS允许您这样做。例如,在您的代码中,只需将store
的type
属性从ajax
更改为jsonp
。
另外,将servlet代码更改为使用基于callback
GET查询的JavaScript函数调用来“填充”jsonObj
变量(请注意,当通过类似于http://abc.com/xyz?callback=someCallbackFunction的URL发出GET请求时,将检索callback
GET查询)。
下面是你的最后一行应该是什么样子:
out.println(callbackParam + "(" + jsonObj + ");");
其中,callbackParam
是从GET查询的callback
参数中获得的值。
https://stackoverflow.com/questions/10730937
复制相似问题