Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mengendalikan input yang berpotensi "palsu" dalam JSON? Perbincangan tentang alternatif

Andaikan, saya tidak pasti jika ada authorities(但如果存在,我希望选择它们)。如果没有选中的authorities,我希望jQuery选择authorities yang disemak, tidak kira sama ada ia dipilih (sebenarnya, ini bermakna mendapatkan semula nilai input tersembunyi). Pemikiran saya untuk menggunakan konsep "nilai sebenar"/"nilai palsu" JS untuk menangani situasi ini ialah:

    let user = {
        id: $(this).find('[name=id]').val(),
        username: $(this).find('[name=username]').val(),
        password: $(this).find('[name=password]').val(),
        name: $(this).find('[name=name]').val(),
        lastName: $(this).find('[name=lastName]').val(),
        department: $(this).find('[name=department]').val(),
        salary: $(this).find('[name=salary]').val(),
        age: $(this).find('[name=age]').val(),
        email: $(this).find('[name=email]').val(),
        enabledByte: $(this).find('[name=enabledByte]').val(),
        authorities: JSON.parse($(this).find('[name=authorities]:checked').val()) || 
                    JSON.parse($(this).find('[name=authorities]').val())
    };

Namun, ia tidak berkesan. Menariknya, ia berfungsi dalam coretan kod di bawah. Mungkinkah val()在匹配失败时返回的undefined不是“假值”吗?想想看!我最好的猜测是,当解析undefined时,JSON.parse() akan membuang ralat dan bukannya mengembalikan beberapa "nilai palsu" yang saya harapkan. Kaedah ini tidak menerima "param ATAU param", bukan?

Pada pendapat anda, bagaimanakah saya harus memberikan sandaran untuk situasi ini (selain itu, sudah tentu, menyemak "nilai palsu" authorities yang dipilih secara individu, yang agak bertele-tele untuk citarasa saya)?

 

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


<标题>Halaman pengurusan

<正文>
<标题> Nama Nama belakang Jabatan E-mel <正文>

Isi borang

<表格>
<标签=“名称”>Nama:
<脚本> $(document).ready(function() { $('form').on('submit', fungsi tak segerak (event) { event.preventDefault(); $('tbody').append( `` ); const SubmitButton = $(this).find('[type=submit]'); Bentuk malar = $(ini); Hantar button.removeClass('btn-primary') .addClass('btn-success') .attr('value', 'User has been added!') .attr('jenis', 'butang') .click(() => $('[href="#users-table"]').tab('show')); setTimeout(fungsi(){ commitButton.removeClass('btn-success') .addClass('btn-primary') .attr('nilai', 'serahkan') .attr('Jenis
P粉161939752P粉161939752405 hari yang lalu525

membalas semua(2)saya akan balas

  • P粉818306280

    P粉8183062802023-09-11 00:47:41

    Masalahnya ialah jika pemilih tidak menjumpai sebarang padanan, .val()返回undefined,而JSON.parse(undefined) ia memberikan pengecualian.

    Laksanakan sandaran dalam senarai hujah JSON.parse() supaya anda akan menghuraikan sebarang nilai yang berjaya diperoleh.

    authorities: JSON.parse($(this).find('[name=authorities]:checked').val() || 
                            $(this).find('[name=authorities]:first').val())

    balas
    0
  • P粉561323975

    P粉5613239752023-09-11 00:35:45

    Bergantung pada penggunaan anda, anda mempunyai beberapa pilihan:

    1. Anda boleh menggabungkan seperti ini JSON.parse。这将使它在解析之前回退到其他字符串,因此如果第一个值是undefined,它不会出错。但是,如果两个值都是undefinedatau salah satu daripadanya adalah JSON tidak sah yang akan menyebabkan ralat.
    JSON.parse($(this).find('[name=authorities]:checked').val()) || $(this).find('[name=authorities]').val());
    
    1. Jika anda tahu bahawa nilai sama ada JSON yang sah atau undefined,您可以回退到nullnull ialah nilai JSON yang sah, ia boleh dihuraikan. Walau bagaimanapun, jika mana-mana nilai JSON tidak sah, ralat masih akan berlaku.
    JSON.parse($(this).find('[name=authorities]:checked').val()) || $(this).find('[name=authorities]').val() || null);
    
    1. Jika ada kemungkinan bahawa nilai sama ada JSON tidak sah, anda boleh mengelilinginya dalam blok cuba/tangkap. Dengan cara ini, walaupun ia tidak sah, tiada ralat akan dilemparkan. Ini adalah pilihan paling selamat dan tidak akan salah.
    // Helper to make it easier to do this inline
    function safeJsonParse(string) {
      try {
        return JSON.parse(string);
      } catch {
        // JSON is invalid. Will implicitly return undefined.
      }
    }
    
    safeJsonParse($(this).find('[name=authorities]:checked').val()) || safeJsonParse($(this).find('[name=authorities]').val())
    

    balas
    0
  • Batalbalas
  • John Jabatan Tenaga AS IT john_d@gmail.com
    Jane Jabatan Tenaga AS Sumber Manusia jane_d@gmail.com
    ${$(this).find('[name=name]').val()} ${$(this).find('[name=last-name]').val()} ${$(this).find('[nama=jabatan]').val()} ${$(this).find('[name=email]').val() || 'Tidak berkenaan'}