EXT Js同步ajax请求

时间:2011-06-03 21:58:31

标签: javascript ajax function extjs

如何在EXT JS中创建同步ajax请求?

例如,给定此代码:

test1();
ajaxRequest(); //Ajax Request
test2();

执行test2函数时甚至没有完成ajaxRequest()的执行,Ext.Ajax.requesttext2()个调用。

如何在ajaxRequest()函数执行后才能执行test2

我理解这样做的一种方法是在回调中调用{{1}}函数,但是我有一些依赖项和许多代码必须在ajax请求之后以同步方式执行。能帮我解决最好的解决方案吗?

3 个答案:

答案 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调用无法获得响应时运行
  • 在AJAX调用获得响应后运行的
  • callback

如果您想在ajax请求完成后执行test2();,请执行 然后将test2函数放在successfailurecallback函数中;无论你选择哪一个都取决于你...

可以找到有关successfailure功能的更多信息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讨论很有帮助。