5

如何在失败功能中检索响应消息?

store.sync({
 success : function(){},
 failure : function(response, options){
   console.log(response.responseText); //it does not work, because there is responseText attr in response
 }  
});

响应文本是这样的,

{"success":false,"message":"Test Error"}

有谁知道,请指教。

谢谢

[编辑]

console.log(response); 

然后,

在此处输入图像描述

4

3 回答 3

6

我不确定你是否想过这一点,但我很确定上面的建议是错误的。您需要查看存储代理的请求异常。

这是在进行存储同步之前要调用的一些代码。

Ext.Ajax.on('requestexception', function (conn, response, options) {

  if (response.status != 200) {
    var errorData = Ext.JSON.decode(response.responseText);
    Ext.Msg.alert('Creating User Failed',errorData.message);
  }

});

很抱歉挖掘了这篇旧帖子,但看到上面的答案很痛苦,因为我刚刚经历了同样的挣扎。

HTH的。

于 2013-03-21T02:46:10.873 回答
2

这是您需要的:

store.sync({
    success: function(batch) {
        Ext.Msg.alert('Success!', 'Changes saved successfully.');
    },
    failure: function(batch) {
        Ext.Msg.alert("Failed", batch.operations[0].request.scope.reader.jsonData["message"]);
    }
});
于 2013-02-27T00:55:57.917 回答
2

总而言之,所有这些答案都是不正确或低效的。

  1. 可以使用 Ext.Ajax.on,但您将不得不担心请求的竞争条件。不要使用此解决方案,因为它很容易使您陷入困境。Ext.Ajax.on 可能会因为同步以外的原因而被解雇。见展览a。
  2. batch.operations[0].response.responseText 也可以使用,但这不是获取响应的可靠方式,因为“响应”对象不会总是被填充(这取决于请求,如果有异常,404, 500,成功:假等)

展品

    // This picked up my autocomplete comboboxes load - not what I wanted!
    Ext.Ajax.on({
        requestcomplete: {
            fn: callback,
            scope: this,
            single: true
        },
        requestexecption: {
            fn: callback,
            scope: this,
            single: true
        }
    });

当前解决方案

这仍然没有我正在寻找的响应,但是嗯。

    store.sync({
        failure: function (batch, eOpts) {
            // 'this' is the Ext.data.proxy.Ajax object
            // or whatever proxy you are using
            var data = this.getReader().jsonData,
                raw_data = this.getReader().rawData;
        }
    });

我不确定这将如何处理我的全部异常情况堆栈,但我将根据我发现的服务器端异常(404、500 等)修改我的帖子

于 2013-04-04T23:37:32.553 回答