我的代码有问题
我使用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'
但没有显示输出
那么,我该怎么办?
请告诉我我的错误
谢谢你的注意:)
答案 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);
祝你好运!