简体   繁体   English

使用 jquery 填充选择框时出现“未定义”错误

[英]'undefined' Error when Populating Selectbox with jquery

I have this code to populate a selectbox with aa list of banks using jquery我有这个代码来填充一个选择框,其中包含使用 jquery 的银行列表

 let bank_dropdown = $('#bank');

bank_dropdown.empty();


bank_dropdown.prop('selectedIndex', 0);

const bank_url = 'https://ravesandboxapi.flutterwave.com/v2/banks/NG?public_key=FLWPUBK-3f**************1d15e97-X';

// Populate bank_dropdown with list of banks
$.getJSON(bank_url, function (data) {
  $.each(data, function (key, entry) {
    bank_dropdown.append($('<option></option>').attr('value',  entry.data.Banks.Code).text(entry.data.Banks.Name));
  })
});

html html


 <div class="form-group">
     <small><b><label class="float-left" for="inputCategory">Bank</label></b></small>
      <select name="bank" id="bank" class="form-control form-control-sm" required="true">

    </select>
  </div>

The returned response of the url above looks like this上面url的返回响应是这样的

{
  "status": "success",
  "message": "SUCCESS",
  "data": {
    "Banks": [
      {
        "Id": 132,
        "Code": "560",
        "Name": "Page MFBank"
      },
      {
        "Id": 133,
        "Code": "304",
        "Name": "Stanbic Mobile Money"
      }
...
    ],
  }
}

but for some reason i keep getting this error in console但出于某种原因,我一直在控制台中收到此错误

Uncaught TypeError: Cannot read property 'Banks' of undefined未捕获的类型错误:无法读取未定义的属性“Banks”

It looks like your data.data object is itself an object, not an array, and you are trying to iterate over it.看起来您的 data.data 对象本身就是一个对象,而不是一个数组,并且您正在尝试对其进行迭代。

{
  "status": "success",
  "message": "SUCCESS",
  "data": {      <- This is an object, not an array
    "Banks": []  <- This is the array
  }
}

Try this (using data.data.Banks):试试这个(使用 data.data.Banks):

$.each(data.data.Banks, function (key, entry) {
    bank_dropdown.append($('<option></option>').attr('value',  entry.Code).text(entry.Name));
})

If it helps, you can rename your response object to "res" or "response" for clarity如果有帮助,为了清楚起见,您可以将响应对象重命名为“res”或“response”

$.getJSON(bank_url, function (res) {
    // now use res.data.Banks
    $.each(res.data.Banks, function (key, entry) {
        bank_dropdown.append($('<option></option>').attr('value',  entry.Code).text(entry.Name));
    })
});

You are iterating the wrong object.您正在迭代错误的对象。 See the snippet here:请参阅此处的片段:

 const data = { "status": "success", "message": "SUCCESS", "data": { "Banks": [{ "Id": 132, "Code": "560", "Name": "Page MFBank" }, { "Id": 133, "Code": "304", "Name": "Stanbic Mobile Money" }], } }; const bank_dropdown = $("#bank_dropdown"); $.each(data.data.Banks, function(key, entry) { bank_dropdown.append( $('<option></option>').val(entry.Code).html(entry.Name) ); })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="bank_dropdown"> </select>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM