如何在EXT JS中创建同步ajax请求?
例如,给定此代码:
test1();
ajaxRequest(); //Ajax Request
test2();
执行test2函数时甚至没有完成ajaxRequest()
的执行,Ext.Ajax.request
有text2()
个调用。
如何在ajaxRequest()
函数执行后才能执行test2
?
我理解这样做的一种方法是在回调中调用{{1}}函数,但是我有一些依赖项和许多代码必须在ajax请求之后以同步方式执行。能帮我解决最好的解决方案吗?
答案 0 :(得分:27)
我需要类似的内容,在查看Ext.Ajax.request()
和Ext.data.Connection
的源代码后,我发现他们在async
方法上检查了request()
属性,所以,实际上可以发出同步请求,如下所示:
var response = Ext.Ajax.request({
async: false,
url: 'service/url'
});
var items = Ext.decode(response.responseText);
似乎没有记录此async
属性,所以......当然......请注意,它可能会在将来的版本中发生变化。
答案 1 :(得分:11)
在Extjs.Ajax
中,每个AJAX调用都会产生三种类型的回调函数之一:
success
在成功创建AJAX调用并获得响应时运行failure
在AJAX调用无法获得响应时运行callback
如果您想在ajax请求完成后执行test2();
,请执行
然后将test2
函数放在success
,failure
或callback
函数中;无论你选择哪一个都取决于你...
可以找到有关success
或failure
功能的更多信息here。
test1();
Ext.Ajax.request({
url: 'page.php',
params: {
id: 1
},
// scope: this, // you can set the scope too
callback: function(opt,success,respon){
test2();
}
});
注意:此方法不适用于ExtJS 3.
答案 2 :(得分:4)
ExtJS不提供开箱即用的同步请求功能。 事实上,他们强烈反对使用它们。
您可能会发现following讨论很有帮助。