予想されるエラーは、サーバーからのエラーであり、私が予想したか、コードで自分自身が発生させたものです。たとえば、ユーザーが十分な権限を持っていないアクションを実行しようとすると、エラーを説明するメッセージとともにPermissionError
(カスタム) を発生させます。Exception
AJAX の状況で予想されるエラーを処理する良い方法を探していました。唯一の要件は、エラー メッセージをユーザーに表示できるようにすることです。これは、ユーザーが何が起こっているかを把握しておきたいためです。
私の現在のアプローチは、エラー メッセージを JSON オブジェクトにパッケージ化し、それをクライアント エンドに送り返すことです。
var ajaxResponse = $.ajax({
....
});
ajaxResponse.done(function(jsonObj) {
if (jsonObj.success) {
/* no error, do something */
}
else {
/* expected error returned, display jsonObj.error to user */
}
});
ajaxResponse.fail(function(jqXHR, textStatus, errorThrown) {
/* unexpected error returned */
});
私は別のアプローチを念頭に置いていますが、それについてはよくわかりません。基本的に、予想されるエラーのメッセージを JSON オブジェクトにパッケージ化する代わりに、私の django コードではHttpResponse(content="no sufficient privilege", status=403)
. クライアント側の jQuery は次のように変更されます。
ajaxResponse.done(function(response_data) {
/* no error, do something */
});
ajaxResponse.fail(function(jqXHR, textStatus, errorThrown) {
/* both expected and unexpected error would end up here.
* It's an expected error when error code is 403 and
* jqXHR.responseText would give me the error message to
* display to the user.
*/
});
2 番目のアプローチでは、予想されるエラーも予想外のエラーもすべて 1 か所にグループ化する方法が気に入っています。しかし、http ステータス コードをこのように使用するべきではないと感じています。とにかく、どちらが正しい方法なのか知りたいです。どちらでもない場合は、何をするかを共有してください。