Extjs中store与分页传递参数问题

本文介绍了在ExtJS中如何处理store加载数据时传递参数,特别是涉及中文乱码的问题。当使用store.load()传递包含中文的参数时,可能会因服务器URIEncoding导致乱码。解决方法是将请求方式改为POST,通过设置proxy的actionMethods为{'read': 'POST'}。此外,对于分页插件自动调用load的情况,可以通过监听beforeload事件并设置proxy的extraParams来传递额外参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   在Extjs中,使用store从服务器断加载数据,我们一般这样定义:

var store = Ext.create('Ext.data.Store',{
model:'User',
proxy:{
type:'ajax',
url:'findUser.action',
reader:{
type:'json'
}
}
});

当我们需要加载数据时,使用store.load()方法,但在实际情况中,我们是需要向后台传递数据,例如,根据用户Id查询该用户的详细信息,这是我们就需要在load的时候,将用户id也传递给后台,我们可以使用:

store.load({
params:{
userId:'123'
}
});

在Extjs的官方文档中,load方法是默认使用HTTP请求的"GET"方法,这样就会出现一个问题,当我们提交的参数有中文字符时,服务器后台就有可能出现乱码,这是因为,tomcat要对get请求的url进行URIEncoding,如何编码格式不一致,就会乱码。Ext对所有的字符统计进行UTF-8编码。

于是我们就可以统一让参数提交通过“POST”方式进行,要实现“POST”提交,我们可以对store中proxy进行如下配置:

var store = Ext.create('Ext.data.Store',{
model:'User',
proxy:{
type:'ajax',
actionMethods:{read:'POST'},
url:'findUser.action',
reader:{
type:'json'
}
}
});

接下来如果使用了分页插件,每次点击上一页,下一页的时候需要向后台传递参数,此时store的load方法是被分页插件自动调用,我们无法通过load将参数传递进去,这时我们可以使用store中proxy中的extraParams属性配置额外参数,我们需要这样调用:

store.on('beforeload',function(){
this.proxy.extraParams = params;
});

为什么要使用beforeload事件,这是因为,在我们点击下一页的时候,会在load之前,触发beforeload事件,此时我们就可以将params参数,赋值给extraParams,传递到后台去了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值