JSON で「誤った」可能性のある入力を処理するにはどうすればよいですか?代替案の議論
P粉161939752
P粉161939752 2023-09-10 09:35:21
0
2
542

選択した authorities が存在するかどうかわからないとします (ただし、存在する場合は選択してもらいたいと考えます)。 authorities が選択されていない場合、選択されているかどうかに関係なく、jQuery で authorities を選択するようにします (実際には、これは非表示の入力の値を取得することを意味します)。この状況に対処するために JS の「真の値」/「偽の値」の概念を使用することについての私の考えは次のとおりです。 リーリー

しかし、うまくいきません。興味深いことに、以下のコード スニペットでは実際に機能します。一致が失敗した場合に

val() によって返される unknown は「偽値」ではないでしょうか?考えてみてください!私の最善の推測は、unknown が解析されるときに、JSON.parse() が、私が期待するような「偽の値」を返すのではなく、エラーをスローするということです。このメソッドは「param OR param」を受け入れませんよね?

この状況にフォールバックを提供するにはどうすればよいと思いますか? (もちろん、選択した authorities を個別に「偽の値」かどうかチェックすることは別ですが、これは少し冗長です)私にとって) ?

 


<头>
<元字符集=“UTF-8”>

管理ページ<标题>


<正文>
###名前### ###姓### ###部門### ###Eメール### <标题> ジョン 米国エネルギー省 ###それ### john_d@gmail.com ###単純### 米国エネルギー省<正文> ###人事### jane_d@gmail.com ###フォームに記入### ###名前:### ###部門:### 会計 ###Eメール:###

<表格>
<标签=“名称”> <脚本> $(document).ready(function() { $('form').on('submit', 非同期関数 (イベント) { イベント.preventDefault(); $('tbody').append( `
` ); const SubmitButton = $(this).find('[type=submit]'); 定数形式 = $(this); 送信 button.removeClass('btn-primary') .addClass('btn-成功') .attr('値', 'ユーザーが追加されました!') .attr('タイプ', 'ボタン') .click(() => $('[href="#users-table"]').tab('show')); setTimeout(function(){ commitButton.removeClass('btn-success') .addClass('btn-primary') .attr('値', '送信') .attr('タイプ
P粉161939752
P粉161939752

全員に返信(2)
P粉818306280

問題は、セレクターが一致するものを見つけられなかった場合、.val()unknown を返すのに対し、JSON.parse(unknown) はスローすることです。例外 。

JSON.parse() のパラメータ リストでフォールバックを実行して、正常に取得された値を解析します。

リーリー
いいねを押す +0
P粉561323975

ユースケースに応じて、いくつかのオプションがあります:

  1. このように JSON.parse を組み合わせることができます。これにより、解析する前に他の文字列にフォールバックするため、最初の値が 未定義であってもエラーは発生しません。ただし、両方の値が unknown である場合、またはどちらかの値が無効な JSON である場合は、エラーが発生します。
リーリー
  1. 値が有効な JSON または 未定義 であることがわかっている場合は、null にフォールバックできます。 null は有効な JSON 値であり、解析できます。ただし、いずれかの値が無効な JSON である場合は、やはりエラーが発生します。
リーリー
  1. いずれかの値が無効な JSON である可能性がある場合は、try/catch ブロックで囲むことができます。こうすることで、たとえ無効であってもエラーはスローされません。これは最も安全なオプションであり、決して間違いはありません。
リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
###姓:### ###それ### ###人事###
${$(this).find('[name=name]').val()} ${$(this).find('[name=姓]').val()} ${$(this).find('[名前=部門]').val()} ${$(this).find('[name=email]').val() || '該当なし'}