3

クライアント エディターとサーバー サイド API の実装に成功しました。

現在、サーバー側でさらに検証を追加しており、適切な HTTP コード (OK の場合は 200、他の用途の場合は 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."
}

前もって感謝します。

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 に答える