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();
        }
    }]
});

サーブレットであるURLhttp: //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のサーブレットコードは次のとおりです。

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

plsはアドバイスします、私はどこが間違っているのですか?

4

1 に答える 1

1

おそらくクロスドメインAJAXリクエストを作成しようとしています(たとえば、アプリはhttp://def.com/から読み込まれましたが、JSONはhttp://abc.com/から読み込まれようとしています) xyz)。残念ながら、これは許可されていません。

ただし、AJAXリクエストの代わりにJSONPリクエストを実行できます。JSONPが行うことは、スクリプトタグをDOMに挿入することです。これにより、JSONデータを保持するJavaScriptファイルをダウンロードするように強制されます。これで、データを取得できるようになります。

幸い、EXTJSではそれが可能です。たとえば、コードでは、からのプロパティをにtype変更するだけです。storeajaxjsonp

また、サーブレットコードを変更しjsonObjて、GETクエリに基づくJavaScript関数呼び出しで変数を「パディング」しcallbackます(callbackGETクエリは次のようなURLを介してGETリクエストが行われたときに取得されることに注意してください:http://abc.com / xyz?callback = someCallbackFunction)。

最後の行は次のようになります。

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

ここで、はGETクエリcallbackParamのパラメータから取得した値です。callback

于 2012-05-24T05:31:12.683 に答える