仅当存储大小为 0 时如何发送 AJAX 请求
Posted
技术标签:
【中文标题】仅当存储大小为 0 时如何发送 AJAX 请求【英文标题】:How to send AJAX Request only if store size is 0 【发布时间】:2012-12-19 17:17:32 【问题描述】:如何在当前存储大小为 0 的条件下发送组合框的 AJAX 请求。
基本上我有两个级联的远程组合框,并且都是延迟加载(此行为无法更改)
我发现即使第二个组合框是基于第一个组合框扩展时的事件级联的,它也会对服务器进行 AJAX 调用(虽然只有第一个扩展)
querymode local 和 autoload 选项将不起作用,因为它会在创建商店时在页面加载时加载组合框。
下面给出的是代码 sn-p。
xtype: 'combo',id='firstcombo', name: 'DEFAULT_VALUE' ,minChars:2, value: decodehtmlContent('') ,width:200 ,listWidth:500, resizable: true,
valueField : 'id', displayField: 'id', pageSize: 15,forceSelection:true, enableKeyEvents: true,
store: new Ext.data.Store(reader: new Ext.data.CFQueryReader(id: 'NAME',
fields:[name:'id', mapping:'id']),
fields: [name:'id', mapping:'id'],
url:'server/ajax/Params'
),
listeners :
select:function(combo, record, index)
this.setRawValue(decodeHtmlContent(record.get('id')));
cascadeFields();
xtype: 'combo',id='secondcombo', name: 'DEFAULT_VALUE' ,minChars:2, value: decodeHtmlContent('') ,width:200 ,listWidth:500, resizable: true,
valueField : 'id', displayField: 'id', pageSize: 15,forceSelection:true, enableKeyEvents: true,
store: new Ext.data.Store(reader: new Ext.data.CFQueryReader(id: 'NAME',
fields:[name:'id', mapping:'id']),
fields: [name:'id', mapping:'id'],
url:'server/ajax/Params',
baseParam:valuefirst:''
,
listeners:
beforeload: function(store, options)
var value = Ext.getCmp('fistcombo').value;
Ext.apply(options.params,
valuefirst:value
);
,
),
listeners :
select:function(combo, record, index)
this.setRawValue(decodeHtmlContent(record.get('id')));
function cascadeFields()
var combo = Ext.getCmp('secondcombo');
if(combo.store)
var store = combo.store;
combo.setDisabled(true);
combo.clearValue('');
combo.store.removeAll();
combo.store.load();
combo.setDisabled(false);
【问题讨论】:
【参考方案1】:要扩展您的代码,您可以这样做
listeners:
beforeload: function(store, options)
if (store.getCount() > 0)
return false; // will abort the load operation.
var value = Ext.getCmp('fistcombo').value;
Ext.apply(options.params,
valuefirst:value
);
这在 ExtJS 3.x 和 ExtJS4.x 中应该是一样的,因为你没有指定这个。但我猜你正在使用 3.x
如果这让组合挂起,请给我反馈,因为还有另一种但更复杂的方法。
【讨论】:
我在您完成后 17 秒发布了完全相同的解决方案。 +1 这是我通过这个输入解决的问题。基本上我有两个组合框,我根据其他组合框中的“选择”事件级联第二个组合框。如果第二个组合框是级联的,用户不应该能够通过刷新或直接提供 AJAX 请求来重新加载该组合框。 'beforeLoad' 方法中的这种检查避免了这种情况。 这个人的答案旁边有一个“标记正确”按钮。你应该使用它。很抱歉这么坦率,但如果这解决了你的问题,这就是 sra 在很大程度上意味着什么。以上是关于仅当存储大小为 0 时如何发送 AJAX 请求的主要内容,如果未能解决你的问题,请参考以下文章
将 ajax 响应中的变量存储为全局变量并用于发送其他 ajax 请求?