0

我无法在 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 控制台上看到以下 JSON:

{"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);

请告知,我哪里出错了?

4

1 回答 1

1

您可能正在尝试发出跨域 AJAX 请求(例如,您的应用程序是从http://def.com/加载的,但您正在尝试从http://abc.com/加载 JSON xyz)。不幸的是,这是不允许的。

但是,您可以执行 JSONP 请求而不是 AJAX 请求。JSONP 所做的是将一个脚本标签注入到 DOM 中,它会强制它下载一个 JavaScript 文件,该文件将在其中保存您的 JSON 数据。然后,您应该能够检索您的数据。

幸运的是,EXTJS 允许您这样做。例如,在您的代码中,只需将from的type属性更改为。storeajaxjsonp

jsonObj此外,更改 servlet 代码以使用基于 GET 查询的 JavaScript 函数调用“填充”变量callback(注意,callback当通过如下 URL 发出 GET 请求时检索 GET 查询:http: //abc.com /xyz?callback=someCallbackFunction)。

这是您的最后一行的样子:

out.println(callbackParam + "(" + jsonObj + ");");

其中callbackParam是您从callbackGET 查询的参数中获得的值。

于 2012-05-24T05:31:12.683 回答