次のajax呼び出しがあり、エラーが発生した場合は、デフォルトのエラーメッセージが定数に格納されます。これを使用します。応答にカスタムメッセージが含まれていない場合。これを見ると、もっとうまくやれると思い続けています。誰かが私がそれをより良くする方法を提案できますか?

function requestService(){ $.ajax({ dataType: "json", type: "POST", url: "/myurl", contentType: CONTENT_TYPE, timeout: AJAX_TIMEOUT, success: function(data, textStatus, jqXHR){ populateData(JSON.parse(jqXHR.responseText)) }, error: function(err){ var errorMessage = AJAX_ERROR; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(error) { //There was an problem finding an error message from the server. The default message will be used. } displayError(errorMessage) }, complete: function(){ console.log("complete"); } }); }; 

コメント

  • コードレビューへようこそ! 'コードを改善したいというよりも、コードの機能をわかりやすく表すためにタイトルを変更しました('結局のところ、サイトの全体的な意図)。すばらしい回答が得られることを願っています!

回答

ほとんどの場合- -bookはすでに作成されていますが、catchブロックを使用してデフォルトを設定できます:

error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } displayError(errorMessage); } 

または、必要に応じて、完全なtry...catch...finally定式化を使用できます。

error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { errorMessage = AJAX_ERROR; } finally { displayError(errorMessage); } } 

または、カスタムエラーメッセージを取得してみてください。 、そして最後の瞬間にのみデフォルト設定:

error: function(err){ var errorMessage; try { errorMessage = JSON.parse(err.responseText).messages.messages[0].description; } catch(exception) { // ignored } displayError(errorMessage || AJAX_ERROR); } 

これの考えられる利点は、サーバーが何らかの理由で空白(false “y)を送信した場合です。上記のエラーメッセージは、例外がスローされなかった場合でも、デフォルトで一般的なエラーメッセージになります。

いずれにしても、全体的なアプローチは問題ないようです。サーバーを取得するためのよりクリーンな方法はありません。 「エラーメッセージ。JSONを解析して 構造を深く掘り下げる必要があるためです。どちらの場合も例外がスローされる可能性があるため、try...catchが最も簡単な方法です。それを処理します。とにかく、少なくともJSON.parseにはtry..catchが必要なので、両方に使用することをお勧めします。

コメント

  • ありがとうございます。これらは役立つ提案であり、もう1つの目があったことを確信しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です