Validation 使用REST代理访问Ext.data.Model.save()回调中的HTTP响应

Validation 使用REST代理访问Ext.data.Model.save()回调中的HTTP响应,validation,rest,extjs,extjs4.1,Validation,Rest,Extjs,Extjs4.1,我成功地实现了客户端编辑器和服务器端API 现在,我在服务器端添加了更多验证,除了返回正确的HTTP代码(200表示OK,4xx表示其他用途,500表示错误等),我还想返回Model.save()生成提交后失败的验证列表 我是这样运行的: myModel.save({ success: function (a, operation, c) {...}, failure: function (a, operation, c) {...} }); 但如果出现故障,操作对象始终只有响应状态和

我成功地实现了客户端编辑器和服务器端API

现在,我在服务器端添加了更多验证,除了返回正确的HTTP代码(200表示OK,4xx表示其他用途,500表示错误等),我还想返回Model.save()生成提交后失败的验证列表

我是这样运行的:

myModel.save({
  success: function (a, operation, c) {...},
  failure: function (a, operation, c) {...}
});
但如果出现故障,操作对象始终只有响应状态和状态文本

operation.error.status // i.e. 409
operation.error.statusText // "Conflict"
但是服务器端的响应中添加了失败验证(主要是域级验证)的详细信息

有没有一种方法可以获取服务器发送的内容作为对PUT/POST提交的HTTP响应的主体

我必须使用特定的JSON结构返回它吗

编辑: 我现在将其作为HTTP响应的主体返回(代码为4xx):


提前感谢。

出于某种原因,Ext没有将响应内容附加到错误对象,但如果出现故障,它会触发一个异常事件

因此,我们所做的是处理模型代理的
“异常”
事件,然后我们就可以访问XHR响应,可以用它做任何我们想做的事情

myModel.getProxy().on('exception', this.onProxyException, this);
处理程序如下所示:

onProxyException : function (proxy, response, operation) {
    var errors;
    errors = Ext.JSON.decode(response.responseText).message;
    /* Whatever is needed with the errors */
}
在这个例子中,我们假设错误是JSON格式的,它们可能是一个简单的文本字符串,不需要使用
decode()

您可以编写如下代码:

model.save({
    success: function (record, operation) {
    // json response from server         
    console.log(operation.response);                  
    },
    failure: function (record, operation) {
        // undefined
        console.log(operation.response); 
        // json response from server
        console.log(operation.request.scope.reader.jsonData);
    }
});
  • 在读卡器块中添加:
    messageProperty:“message”
  • 从服务器返回:
    success:false,消息:“错误测试”
  • 故障
    获取错误:

    failure: function (records, operation) {
        Ext.Msg.alert('error', operation.error);
    }
    

  • 虽然你描述得很详细,但我对这个问题不是很清楚。1) 目前尚不清楚“验证失败的服务器端详细信息(?)是否正在添加到响应中”,这是否能按预期工作?2) 服务器响应是否由您控制?3) 你知道json_编码的可能性吗?4) 你看过/examples文件夹下的restful示例了吗?1)是的,失败的验证详细信息在响应中2)我控制着服务器3)所有内容都是JSON编码在JS对象中,带有属性数据、消息和成功(请参见有问题的编辑)4)我看过了,响应是一样的。好的,因此,如果我理解正确,您只想检查从服务器返回的内容,对吗?如果是这种情况,请告诉我您如何发送请求(Direct/Ajax),以及您是否需要全局响应处理程序或每个请求唯一的响应处理程序。我评估mymodel.save(),它在内部使用XHR将消息发送到服务器,如果代码为2xx,则评估成功处理程序,如果不是,则评估失败处理程序。这两个问题都在我上面的代码中显示出来。Sencha Touch在save()上也有同样的问题,建议的解决方案工作得很好。在我需要现有故障回调中的响应数据,而该数据无法移动的情况下,我投票认为它很有用。
    failure: function (records, operation) {
        Ext.Msg.alert('error', operation.error);
    }