博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExtJs异步无法向外传值和赋值的解决办法,亲测有效
阅读量:4590 次
发布时间:2019-06-09

本文共 1693 字,大约阅读时间需要 5 分钟。

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();
     }

转载于:https://www.cnblogs.com/bjh1117/p/7004815.html

你可能感兴趣的文章
1001 Maximum Multiple(2018 Multi-University Training Contest 1)
查看>>
对Java对象的认识与理解
查看>>
python——父类与子类的一些说明
查看>>
2019年3月3日 2018-2019-2 20189205《移动平台应用开发实践》第二周作业
查看>>
MySQL 性能优化--优化数据库结构之优化数据类型
查看>>
软件工程之软件需求分析
查看>>
Electron简介和安装使用
查看>>
Improving Visual C++ Debugging with Better Data Display
查看>>
JDBC
查看>>
workspace 配置
查看>>
C# 针对特定的条件进行锁操作,不用lock,而是mutex
查看>>
Spring归纳
查看>>
MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
查看>>
24小时学通Linux内核之向内核添加代码
查看>>
python 函数
查看>>
Solr4.0 如何配置使用UUID自动生成id值
查看>>
Marketing™Series用户手册(Marketing™Series Manual)
查看>>
Java动态代理
查看>>
二维码开源库zbar、zxing使用心得
查看>>
框架设计读书笔记--扩展点设计--组合法
查看>>