1、Ext.data.Store.load();方法是异步的,
下面的方式获得的reCount始终是0,因为还没等后台的方法执行完就赋值了,此时store的record还没获得值。
var
testStore =
new
Ext.data.GroupingStore({
proxy :
new
Ext.data.HttpProxy({
url :
'
'
}),
reader :
new
Ext.data.JsonReader({
root :
'hstamcx'
,
totalProperty :
"results"
,
fields : [
"id"
,
"value"
]
})
});
Ext.onReady(
function
(){
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget =
'side'
;
testStore.load ();
var reCount = testStore.getCount();
var
port =
new
Ext.Viewport({
layout :
'auto'
,
frame :
true
,
items : [winKey]
});
});
2、如果想要对加载的值进行处理,必须将后续处理写在回调函数中。
Ext.onReady(
function
(){
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget =
'side'
;
testStore.load({
callback : function(r, options, success) {
var reCount = testStore.getCount();
}
});
var
port =
new
Ext.Viewport({
layout :
'auto'
,
frame :
true
,
items : [winKey]
});
});
此时可以获得reCount的值,并且
callback : function(r, options, success)的r就是store加载查到的数据。
但依然存在问题:r的数据值只能在回调函数里面使用,在callback函数里既不能给外部的其他元素赋值,也没有办法将r数据传到外面去
3、如果想在js页面向后台发送请求,并在外面使用后台返回的数据值,可以使用
Ext.Ajax.request,并将请求方式设置成同步,接收数据的变量要定义在
Ext.Ajax.request外面
var
cancelMode;
Ext.Ajax.request({
url:
'
'
,
method:
'post'
,
sync:
true, //同步请求
success:
function
(response) {
var
response = Ext.util.JSON.decode(response.responseText);
cancelMode = response.hstamcx[0].param_value;
}
});
此时就可以在外面使用
Ext.Ajax.request的请求获得的数据了,比如alert(
cancelMode
);
后台代码示例:该示例是举个大概例子,并不是完整代码
public
void
getData(
HttpServletResponse response
)
{
TestData td = TestDataDao.getTestdata();
String message =
"{name:"
+
td .getName()
+
",id:"
+ td.getId()+ "}";
PrintWriter
out=response.getWriter();
out.write(message);
out.flush();
}