如何在存储加载extjs 4之后获取服务器response.responseText

时间:2012-04-20 06:24:14

标签: extjs4 extjs-mvc

我在extjs 4中从服务器响应中获取response.responseText时遇到一个问题。

以下是加载商店的代码:

store.load({
    params: {
        'projectid': this.projectid
    },
    callback: function (records, operation, success, response) {
        console.log(records);
        console.log(response.responseText);
    }
});

实际上,当我使用以下功能发出请求时,我正确地获得了reponse.responseText

Ext.Ajax.request({
    url: 'login/GetLoginCheck.action',
    method: 'GET',
    params: {
        'username': values['username'],
        'password': values['password']
        },
    scope: this,
    success: function(response) {
        Ext.Msg.alert(response.responseText);
        var redirect = response.responseText;
        window.location.href = "" + redirect + ".jsp";
    },
    failure: function(response) {
        Ext.Msg.alert('INVALID USERNAME OR PASSWORD');
    }
});

所以请建议我如何从具有回调函数的store.load()中获取response.responseText

6 个答案:

答案 0 :(得分:8)

回调有3个参数...... 试试这个:

store.load({
    params: {
        'projectid': this.projectid
    },
    callback: function (records, operation, success) {
        console.log(operation.response.responseText);
    }
});

答案 1 :(得分:1)

我使用Model.load(...)遇到了类似的问题,但就我而言,operation.response未定义。所以,我找到了另一种方法:

Model.load(1, {
    success: function () {
        // I haven't tested inside this callback yet
    },
    failure: function (record, operation) {
        var response = operation.request.proxy.reader.rawData;
        alert(response.message);
    }
});

答案 2 :(得分:1)

  

您也可以尝试这个..

Ext.create('Ext.data.Store',{
    fields[],
    proxy:{url:'store_url.json', reader:{type:'json',root:'data'}},
    autoLoad:true,
    listeners:{
        load:function(store, record, success, opts){
            var response_text = store.proxy.reader.rawData;
            console.log(response_text);
        }
    }
})

答案 3 :(得分:0)

在extjs 3.4中你可以使用它:

this.historyInvoiceHeaderGrid.store.load({
        params:{start:0, limit:20},
        callback: function (records, operation, success) {
            console.log(this.reader.jsonData);
        }});

此属性store.reader.jsonData将返回完整回复。

也许对于某人来说,它会在extjs 3中有用。

答案 4 :(得分:0)

在Extjs 4.x中它的工作方式如下

myStore.load({
        url: 'myurl',
        method: 'GET',
        callback: function(records, operation, success) {
        var jsonStr = Ext.JSON.decode(operation.response.responseText);
            alert(jsonStr.message);
         }
});

在Extjs 5中你必须这样做

myStore.load({
        url: 'myurl',
        method: 'GET',
        callback: function(records, operation, success) {
 var message=forecastMethodStore.getProxy().getReader().rawData.message;
         }
});

但这里的关键点是你应该在java方面的JSON响应中设置消息。

  

示例:{" Root":[],"消息":"重复"}"

希望这会对某人有所帮助。

答案 5 :(得分:0)

您必须在messageProperty中的proxy reader中设置'Ext.data.Store'

            reader: {
                type: 'json',
                root: 'myDataList',
                totalProperty: 'myTotalRecord',
                successProperty: 'mySuccess',
                messageProperty : 'myMsg'
            }

mySuccess返回false后调用callback: function

    store.load({
        params: {start: 0, limit: 15},
        callback: function (records, operation, success) {
            if (!success) {
                try {
                    Ext.Msg.alert('Sorry !', operation.getError());
                    // operation.getError() returns myMsg value
                }catch (e){
                    Ext.Msg.alert('Exception !', e);
                }
            }
        }
    });

这是Java Servlet的json返回。

    Map<String, Object> myDataMap = new HashMap<>(3);
    try {
        // Something
        myDataMap.put("mySuccess", true);
        myDataMap.put("myMsg", "Whats up khomeni !");
    } catch (Exception e) {
        myDataMap.put("mySuccess", false);
        myDataMap.put("myMsg", "Whats wrong with me.");
    }
    String json = new Gson().toJson(myDataMap);