Extjs4.1,存储同步后检索响应消息

Posted

技术标签:

【中文标题】Extjs4.1,存储同步后检索响应消息【英文标题】:Extjs4.1, Retrieve response message after store sync 【发布时间】:2012-08-09 13:03:04 【问题描述】:

如何在失败函数中获取响应消息?

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

那么,

【问题讨论】:

如果你得到console.log( response ),你会得到什么? console.log( response.message ) 会给什么?您确定响应文本包含成功的对象,还是结果本身? @Izhaki 我将 console.log(response) 结果视图添加到我的问题中,请您查看我的问题吗?并且没有 response.message。 嗯,你看到的是Ext.data.batch,所以没有回应。请参阅我的答案以获得解决方案。 其实你能不能把response改成batch然后试试:console.log(batch.operations[0].response.result); 【参考方案1】:

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

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

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。

【讨论】:

【参考方案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"]);
    
);

【讨论】:

【参考方案3】:

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

    可以使用Ext.Ajax.on,但您必须担心请求的竞争条件。不要使用此解决方案,因为它很容易使您陷入困境。 Ext.Ajax.on 可能会因为同步以外的原因而被解雇。见展览 a。 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 等)修改我的帖子

【讨论】:

以上是关于Extjs4.1,存储同步后检索响应消息的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 extjs4.1 中解析没有根对象的 json 响应

ExtJS 4.1 - 检索嵌套 JSON 的 hasOne 信息

ExtJS4.1 TreeGrid 中的二次排序

Extjs4 localstorage -- 如何删除所有记录?

ExtJS 4.1:卸载事件

当initcomponent加载存储extjs 4.1.1时视图不显示存储