将参数从extjs发送到PHP文件(Codeigniter)

时间:2012-12-10 02:57:36

标签: php codeigniter extjs

我的代码有问题 我使用ExtJs和Codeigniter开发我的网络应用程序
实际上我的问题是从extjs向CI Controller发送参数。
我有一个像这样的简单代码

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' 但没有显示输出 那么,我该怎么办? 请告诉我我的错误 谢谢你的注意:)

2 个答案:

答案 0 :(得分: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的路线 - 至少就我所知道的情况而言,至少就我所知道的那样。

答案 1 :(得分:0)

这是在执行GET请求并使用查询字符串:

../ planspec / planmaterial?测试= 2

然后,你应该使用:

$this->input->get('test', TRUE);
祝你好运!