次の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つの目があったことを確信しています。