2012-12-10 39 views
1

我的代碼有問題。
我使用ExtJs和Codeigniter來開發我的web應用程序
其實我的問題是從extjs發送參數到CI控制器。
我有一個簡單的代碼這樣
從extjs發送參數到PHP文件(Codeigniter)

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」。
但輸出未顯示。
那麼,我該怎麼辦?
請告訴我關於我的錯誤。
感謝您的關注:)

回答

0

這是做一個GET請求,並使用查詢字符串:

../planspec/planmaterial?test=2

然後,你應該使用:

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

祝你好運!

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值,並將其初始化:

$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? 
    */ 
} 

我不過建議您:

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

您以下落得使用不同的路線,一個專門用於XHR的路線 - 至少就我所看到的你所發佈的內容而言。