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异步无法向外传值和赋值的完美解决办法,希望对大家有所帮助