1

コードに問題があります。
ExtJs と Codeigniter を使用して Web アプリを開発してい
ます。実際に私の問題は、extjs から CI コントローラーにパラメーターを送信することです。
私はこのような簡単なコードを持っています

Ext.Loader.setConfig({enabled: true});
Ext.Loader.setPath('Ext.ux', '../../extjs/src/ux');
Ext.require([
    'Ext.grid.*',
    'Ext.data.*',
    'Ext.ux.grid.FiltersFeature',
    'Ext.toolbar.Paging'
]);

Ext.define('materialspec', {
    extend: 'Ext.data.Model',
    fields: [
             {name: 'id_planmaterial', type: 'string'},
             {name: 'material_desc', type: 'string'},
             {name: 'material_priority', type: 'string'},
             {name: 'material_product_code', type: 'string'},
             {name: 'material_qty', type: 'string'},
             {name: 'material_unit', type: 'string'},
             {name: 'material_note', type: 'string'},
             {name: 'docNo', type: 'string'}
            ]
});

var store2 = Ext.create('Ext.data.Store', {
    id: 'store2',
    model: 'materialspec',
    proxy: {
        type: 'ajax',
        url : '../planspec/planmaterial',
        reader: {
            type: 'json',
            root: 'id_planmaterial'
        }
    },
    sorters: [{
        property    : 'id_planmaterial',
        direction   : 'ASC'
    }]
});

Ext.onReady(function(){
    Ext.QuickTips.init();
    var encode = false;
    var local = true;

    var filters2 = {
        ftype: 'filters',
        encode: encode,
        local: local,
        filters: [
            {
                type: 'boolean',
                dataIndex: 'id_planmaterial'
            }
        ]
    };

    var grid2 = Ext.create('Ext.grid.Panel', {
        border: false,
        store: store2,
        columns: [
            { header: "No.", xtype: 'rownumberer', width: 30, align: 'center' },
            { id: 'docNo', header: "Document No.", dataIndex: 'docNo', sortable: true, filter: {type: 'string'} },
            { id: 'descMaterial', header: "Description", dataIndex: 'material_desc', flex:1, filter: {type: 'string'} },
            { id: 'priority', header: "Priority", dataIndex: 'material_priority', flex:1, filter: {type: 'string'} },
            { id: 'productCode', header: "Product Code", dataIndex: 'material_product_code', flex:1, filter: {type: 'string'} },
            { id: 'qty', header: "Quantity", dataIndex: 'material_qty', flex:1, filter: {type: 'string'} },
            { id: 'unit', header: "Unit", dataIndex: 'material_unit', flex:1, filter: {type: 'string'} },
            { id: 'note', header: "Note", dataIndex: 'material_note', flex:1, filter: {type: 'string'} }
            ],
        loadMask: true,
        features: [filters2],
        title: 'PlanSpec Material',
        height: '100%',
        width: '100%',
        renderTo: 'gridMaterial'
    });

    store2.load({
    params:{
        test:2
    }
    });
});

そして、私はこのようなコントローラーを持っています

public function planmaterial(){
        $result = $this->input->post('test');
        echo $result;
    }

実際には、出力 = '2' を指定する必要があると思います。
しかし、出力は表示されません。
それで、私は何をすべきですか?
私の偽物について教えてください。
ご清聴ありがとうございました:)

4

2 に答える 2

2

間違った場所を探しています。ルートが直接および XHR を介して呼び出されることに対処する必要があるように見えます。

まず、CI が$_GETスーパー グローバルを破壊しないように構成されていることを確認します。それはapplication/config/config.php:

$config['allow_get_array']      = TRUE;

次に、コントローラで入力クラスを使用して、リクエストが実際に XHR であるかどうかを判断します。ある使用法では変数を送信し、別の使用法では JSON 応答を送信しているため、知っておく必要があります。

if ($this->input->is_ajax_request()) {

これは、HTTP_X_REQUESTED_WITHヘッダーが設定されているかどうかを判断するだけです。

最後に、$_GETではなくから値を取得し$_POST、初期化します。

    $result = $this->input->get('test', FALSE);

次のようになります。

$value = $this->input->get('test', FALSE);
if ($this->input->is_ajax_request() === TRUE) {
    if ($value === FALSE) {
        /* deal with an improper XHR */
    } else {
        /* deal with a proper XHR, send your JSON */
    }
} else {
    /* Not an AJAX request
     * Adjust your view based on the value of 'test' being set or not. Do you
     * need to do something differently if it isn't set? 
     */
}

ただし、XHR専用の別のルートを使用することをお勧めします-少なくとも、投稿した内容を見てわかる限り。

于 2012-12-10T03:28:36.890 に答える
0

これは GET リクエストを実行し、クエリ文字列を使用しています。

../planspec/planmaterial?test=2

次に、次を使用する必要があります。

$this->input->get('test', TRUE);

幸運を!

于 2012-12-10T03:05:31.867 に答える