簡體   English   中英

為什么JSON文件中的列表項返回未定義的jQuery?

[英]Why are the list items from a JSON file coming back undefined jQuery?

所以我有一個狗名工具,它在彈出窗口時一直在起作用,我正在使用一個單獨的文件將名稱填充為列表項作為列表項。 這是執行此操作的

<div class="dnt-container-mobile seasonal-bg-dark">
  <h1 class="mobile-heading">Dog Name Finder</h1>
  <h1 class="wide-heading">
    <!-- <span class="logo teal icon-akc-logo dnt-logo"></span> -->Dog Name Finder</h1>
  <form class="dnt-tool" id="dnt" name="dnt">
    <div class="dnt-overlay">
      <input id="male" name="gender" type="radio" value="Male" />
      <label for="male">Male</label>
      <input data-id="594" id="female" name="gender" type="radio" value="Female" />
      <label for="female">Female</label>
      <input checked="checked" data-id="0" id="all" name="gender" type="radio" value="All" />
      <label for="all">All</label>
      <select>
            <option data-id="0" value="/dog-name-finder/">Select a Category</option>
            <option data-id="0" value="/dog-name-finder/">All</option>
            <option value="/dog-name-finder/baby/">Baby</option>
            <option data-id="602" value="/dog-name-finder/celebrity/">Celebrity</option>
            <option data-id="603" value="/dog-name-finder/cute/">Cute</option>
            <option data-id="598" value="/dog-name-finder/disney/">Disney</option>
            <option data-id="600" value="/dog-name-finder/fancy/">Fancy</option>
            <option data-id="605" value="/dog-name-finder/most-popular/">Most Popular</option>
            <option data-id="599" value="/dog-name-finder/presidential/">Presidential</option>
            <option data-id="597" value="/dog-name-finder/techy/">Techy</option>
            <option data-id="596" value="/dog-name-finder/television/">Television</option>
            <option data-id="606" value="/dog-name-finder/trendy/">Trendy</option>
            <option data-id="595" value="/dog-name-finder/unisex/">Unisex</option>
            <option data-id="604" value="/dog-name-finder/video-game/">Video Game</option> 
      </select>
    </div>
    <!-- end of dnt-overlay -->
    <div class="dnt-btn">
      <button id="submit" type="submit">Show Names</button>
    </div>
    <!-- end of dnt btn -->
  </form>
  <!-- end of dnt-tool -->
</div>
<!-- end of dnt-container-mobile -->

這是

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/0.9.9/jquery.magnific-popup.min.js"></script>
<script>
  $(document).ready(function() {
        $('#dnt').submit(function(e) {
          var cat_id = $('.dnt-overlay > select > option:selected').data('id') || 0;
          var cat_title = $('.dnt-overlay > select > option:selected').text() || 'All';
          if (cat_id === 0) {
            cat_title = 'All';
          }
          var dnt_url = $('.dnt-overlay > select > option:selected').val() || '/dog-name-finder/';
          var gender = $('.dnt-overlay > [name=gender]:checked').data('id') || 0;
          var gender_title = $('.dnt-overlay > [name=gender]:checked').val() || 'All';
          var title = cat_title;
          var html = '';

          var params = '';

          if (window.innerWidth <= 320) {
            params = '?limit=18';
          } else {
            params = '?limit=21';
          }


          if (cat_id > 0) {
            params += '&' + 'cat_id=' + cat_id;
          }

          if (gender > 0 && cat_title != 'Gender Agnostic' && cat_title != 'Unisex' && cat_title != 'Male' && cat_title != 'Female') {
            title += ' ' + gender_title;
            params += '&' + 'gender=' + gender;
            if (cat_title == 'All') {
              dnt_url += gender_title.toLowerCase() + '/';
            } else {
              dnt_url += '?gender=' + gender_title.charAt(0).toLowerCase();
            }
          }

          title += ' Dog Names';

          $('#dnt-popup > h1').text(title);
          $('#dnt-popup > .more-btn').find('a').attr('href', dnt_url);



          e.preventDefault(); // We don't need to send the form, because it's all local
          if ($('#male').is(':checked')) { // Check if male is checked
            $('#dnt-popup').removeClass('dnt-all').removeClass('dnt-female').addClass('dnt-male');
          } else if ($('#female').is(':checked')) { // Check if female is checked 
            $('#dnt-popup').removeClass('dnt-all').removeClass('dnt-male').addClass('dnt-female');
          } else if ($('#all').is(':checked')) { // Check if all is checked
            $('#dnt-popup').removeClass('dnt-female').removeClass('dnt-male').addClass('dnt-all');
          }
          $.ajax({
              type: 'GET',
              dataType: "json",
              url: "/wp-content/themes/akc/dnt.json" + params,
            })

            .done(function(data) {

              $.each(data, function(index, value) {
                html += '<li>' + value.title + '</li>';
              });

              $('#dnt-popup > .results-list > ul').html(html);

              $.magnificPopup.open({ // open pop up for male
                items: {
                  src: '#dnt-popup',
                  type: 'inline'

                }, //item
                mainClass: 'animated slideInRight'
              }); ///popup open


            });



        }); ///submit function 



        $('#dnt-popup > .more-btn > .long-btn > a, #dnt-popup > .more-btn > .short-btn > a').on("click", function() {

          var cat_id = $('.dnt-overlay > select > option:selected').data('id') || 0;
          var cat_title = $('.dnt-overlay > select > option:selected').text() || 'All';
          if (cat_id === 0) {
            cat_title = 'All';
          }

          var gender_title = $('.dnt-overlay > [name=gender]:checked').val() || 'All';



        }); ///submit function
</script>

這是文件中的一些數據:

[{
    "Name": "Aaliyah",
    "Female": 594,
    "Baby": 601
  },
  {
    "Name": "Abby",
    "Female": 594
  },
  {
    "Name": "Abe",
    "Male": 593,
    "Video Games": 604
  }
]

有什么原因會導致數據返回未定義狀態? 的格式正確。 沒有控制台錯誤消息。

JSON中沒有鍵作為title 您必須使用value.Name來訪問名稱

 var data = [{ "Name": "Aaliyah", "Female": 594, "Baby": 601 }, { "Name": "Abby", "Female": 594 }, { "Name": "Abe", "Male": 593, "Video Games": 604 } ]; $.each(data, function(index, value) { console.log(value.Name); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

如果您想將名稱限制為21個(在注釋中提出),則可以這樣做

$.each(data, function(index, value) {
 if(index==21){
  return false;
 }
 console.log(value.Name);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM