3

これを理解するのに本当に苦労しています。ExtJSアプリケーションでフォームを送信してから、.CSVファイルのデータをダウンロードする必要があります。問題は、ExtJSが「isUpload」を使用してフォームを送信する方法で、POSTしているパラメーターが「mulitpart / form-data」として送信され、それらを使用したり解析したりできないことです。同じ入力フィールド名の値が複数あります。

field: A
field: B
field: C

グリッドを送信すると、上記のように複数のインスタンスとして処理されます。フォームに「isUpload」を導入するとすぐに、次のようになります。

field: A,B,C

私のプログラムは、フィールドを「A、B、C」として読み取り、フィールドの3つの別個のインスタンスではありません。

これが私のコードです。興味深いことに、Firebugで調べると、[Params]タブは正しいように見えますが、[POST]タブにはすべて1つの値があります。

私は最近、URLにパラメータを追加して、それを偽造しようとしました!

    Ext.Ajax.request({
        url : '/cgi-bin/cgijson007.pgm' + '?' + parameters,
        form : myForm,
        params : parameters,
        standardSubmit : true,
        isUpload : true
    });
4

3 に答える 3

2

isUpload:trueは、フィールドとともにファイルをアップロードすることのみを定義するため、マルチパートは正しいです。ダウンロードするには、隠しフレームを使用することをお勧めします。そのためには、名前空間内で定義されたヘルパーを使用します。

helper.util.HiddenForm = function(url,fields){
    if (!Ext.isArray(fields))
        return;
    var body = Ext.getBody(),
        frame = body.createChild({
            tag:'iframe',
            cls:'x-hidden',
            id:'hiddenform-iframe',
            name:'iframe'
        }),
        form = body.createChild({
            tag:'form',
            cls:'x-hidden',
            id:'hiddenform-form',
            action: url,
            target:'iframe'
        });

    Ext.each(fields, function(el,i){
        if (!Ext.isArray(el))
            return false;
        form.createChild({
            tag:'input',
            type:'text',
            cls:'x-hidden',
            id: 'hiddenform-' + el[0],
            name: el[0],
            value: el[1]
        });
    });

    form.dom.submit();

    return frame;
}

// Use it like
helper.util.HiddenForm('my/realtive/path', [["fieldname","fieldValue"]]);

サーバーがダウンロードで応答すると、保存ウィンドウがポップアップ表示されます。

于 2012-09-14T14:21:21.987 に答える
0

以下は、グリッドリストでの投稿のダウンロードを処理する方法です。

まず、投稿するパラメーターと送信関数を含む非表示のファイルを含むhtmlフォームコンテナーを作成します。

var txtFileId = Ext.create('Ext.form.field.Hidden', { name: 'fid', value: 0 });
var dwFrm = Ext.create('Ext.container.Container', {
  autoEl: { tag: 'form',  method: 'POST', target: '_BLANK', 
    action: '/download/files' }, style: { hidden: true },
  items: [txtFileId, {
    xtype: 'hidden', name: 'userId', value: '1111'
  }],
  submit: function (fid) {
    if (fid) {
      txtFileId.setValue(fid);
      this.el.dom.submit();
    }
  }
});

次に、上記のコンポーネントをグリッドのツールバーにドッキングします

var grid = Ext.create('Ext.grid.Panel', {
  .....
  dockedItems: [Ext.create("Ext.Toolbar", {
    dock: "top", items: [
      dwFrm, 
      { text: "Download Selected",
        handler: function () {
          var sm = grid.getSelectionModel();
          if (!sm.hasSelection()) return null;
          var recs = sm.getSelection();
          dwFrm.submit(recs.data.id);
        }
      }
    ]
  })]
  .....
});
于 2013-08-15T06:34:55.247 に答える
0

これは完全に機能します。アレイが含まれています。

downloadFile: function (url, params) {
        debugger;
        var body = Ext.getBody(),
            frame = body.createChild({
                tag: 'iframe',
                cls: 'x-hidden',
                id: 'hiddenform-iframe',
                name: 'iframe'
            }),

            form = body.createChild({
                tag: 'form',
                method: 'POST',
                cls: 'x-hidden',
                id: 'hiddenform-form',
                action: url,
                target: 'iframe'
            });

        for (var i in params) {

            if (Ext.isArray(params[i])) {
                for (var j = 0; j < params[i].length; j++) {
                    form.createChild({
                        tag: 'input',
                        type: 'hidden',
                        cls: 'x-hidden',
                        id: 'hiddenform-' + i,
                        name: i,
                        value: params[i][j]
                    });
                }
            } else {

                form.createChild({
                    tag: 'input',
                    type: 'hidden',
                    cls: 'x-hidden',
                    id: 'hiddenform-' + i,
                    name: i,
                    value: params[i]
                });
            }

        }

        form.dom.submit();

        return frame;
    }
于 2014-10-15T22:09:29.897 に答える