我成功实现了客户端编辑器和服务器端API。
现在我在服务器端添加更多验证,除了返回正确的HTTP代码(200为OK,4xx用于其他用途,500用于错误等)我想返回一个失败的验证列表由Model.save()生成的提交。
我这样运行:
myModel.save({
success: function (a, operation, c) {...},
failure: function (a, operation, c) {...}
});
但如果失败,操作对象只有响应状态及其statusText,全部通过
operation.error.status // i.e. 409
operation.error.statusText // "Conflict"
但是服务器方面正在将错误验证的详细信息(主要是域级的验证)添加到响应中。
有没有办法可以获得服务器发送的作为PUT / POST提交的HTTP响应正文的内容?
我是否必须使用特定的JSON结构返回它?
编辑: 我现在将其作为HTTP响应的主体(代码为4xx)返回:
{
data: {/* the record serialized */},
success: false, // or true if everything went ok
message: "This failed because X and Y."
}
提前致谢。
答案 0 :(得分:4)
由于某种原因,Ext没有将响应内容附加到错误对象,但如果发生故障,它会触发exception
事件。
所以我们所做的就是处理模型代理的"exception"
事件,然后我们就可以访问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()
。
答案 1 :(得分:3)
根据这篇博客: http://code.tonytuan.org/2013/07/extjs-get-server-response-in-modelsave.html
您可以编写如下代码:
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);
}
});
答案 2 :(得分:0)
messageProperty: 'message'
success:false, message: 'error test'
failure
的出现错误:
failure: function (records, operation) {
Ext.Msg.alert('error', operation.error);
}