7

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

下面是我加载商店的代码:

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');
    }
});

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

4

6 回答 6

8

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

store.load({
    params: {
        'projectid': this.projectid
    },
    callback: function (records, operation, success) {
        console.log(operation.response.responseText);
    }
});
于 2012-04-20T11:14:15.530 回答
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);
    }
});
于 2013-05-24T11:22:57.960 回答
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);
        }
    }
})
于 2014-04-01T04:00:24.307 回答
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 中会很有用。

于 2013-11-21T06:46:58.820 回答
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":[], "message":"duplicates"}"

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

于 2015-03-18T15:42:24.640 回答
0

您必须 messagePropertyproxy 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);
于 2017-01-02T07:12:44.900 回答