如何使用ExtJS从变量中的ajax回调中获取响应文本

时间:2014-02-04 00:11:59

标签: javascript extjs

我想知道我是否可以从变量responseText调用中获取Ext.Ajax.Request。我尝试了很多方法," hacks" 没有成功。

实施例

在这种情况下,我正在尝试将responseText分配给accStatus变量,我总是得到undefined(我知道这是 NOT 正确的方法)但我想确切地知道如何处理这个(正确的方法)和return我的function没有问题,并且一个"简单" 方式(如果可能),如下面的代码。

顺便说一句,我使用 Ext 4.2.0


有没有办法做这样的事情?

Ext.define('Util.AccountManager', { 

    singleton: true,

    getAccountStatus: function(id) {
        var accStatus;

        Ext.Ajax.request({
            url : 'rest/accounts',
            method : 'POST',
            params : {id: id},
            callback: function(o, s, r) {
                accStatus = r.responseText;
            }
        });

        return accStatus;
    }

});

Ext.onReady(function () {

    var id = '1234';
    var accStatus = Util.AccountManager.getAccountStatus(id);

    if(accStatus) {
        console.log(accStatus);
    }

});

如果有人想要提供帮助,您可以使用以下URLs导入ExtJS

我还为{"测试" (或至少尝试,因为无法通过此网站发出jsfiddle个请求。

1 个答案:

答案 0 :(得分:2)

您的getAccountStatus需要回调,以便您可以在XHR完成后做出回应。 AJAX是异步的,所以你不能指望在调用getAccountStatus之前调用你的成功回调;

// Will never work unless you use synchronous AJAX (which you shouldn't
// because it would block the UI while the request is pending)
var accStatus = Util.AccountManager.getAccountStatus(id);

执行以下操作

Ext.define('Util.AccountManager', { 

    singleton: true,

    getAccountStatus: function(id, cb) {
        Ext.Ajax.request({
            url : 'rest/accounts',
            method : 'POST',
            // async: true, // This would make your return work, but don't do it
            params : {id: id},
            callback: function(o, s, r) {
                cb(r.responseText);
            }
        });

        // Code here runs before the callback above
    }    
});

Ext.onReady(function () {    
    var id = '1234';
    var accStatus = Util.AccountManager.getAccountStatus(id, function(status){
        console.log(status);
    });
});