3

我成功实现了客户端编辑器和服务器端 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"

但是服务器端正在将失败验证的详细信息(主要是域级别的验证)添加到响应中。

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

我是否必须使用特定的 JSON 结构返回它?

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

{
 data: {/* the record serialized */},
 success: false, // or true if everything went ok
 message: "This failed because X and Y."
}

提前致谢。

4

3 回答 3

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().

于 2012-08-13T20:39:51.743 回答
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);
    }
});
于 2014-04-16T01:48:08.780 回答
0
  1. 在阅读器块中添加:messageProperty: 'message'
  2. 从服务器返回:success:false, message: 'error test'
  3. failure得到错误:

    failure: function (records, operation) {
        Ext.Msg.alert('error', operation.error);
    }
    
于 2019-06-14T11:49:53.853 回答