欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ExtJs异步无法向外传值和赋值的完美解决办法

程序员文章站 2022-07-05 20:45:51
1、ext.data.store.load();方法是异步的,下面的方式获得的recount始终是0,因为还没等后台的方法执行完就赋值了,此时store的record还没获...

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

以上所述是小编给大家介绍的extjs异步无法向外传值和赋值的完美解决办法,希望对大家有所帮助