【问题标题】:Fill HTML dropdown box with external JSON file data用外部 JSON 文件数据填充 HTML 下拉框
【发布时间】:2013-07-20 09:43:45
【问题描述】:

我正在尝试使用来自外部 JSON 文件的数据填充 HTML 下拉菜单,该文件包含以下内容

{
    "Destinations": [
    {
        "destinationName": "London",
        "destinationID": "lon"
    },
    {
        "destinationName": "New York",
        "destinationID": "nyc"
    },
    {
        "destinationName": "Paris",
        "destinationID": "par"
    },
    {
        "destinationName": "Rome",
        "destinationID": "rom"
    }
    ]
}

我想要的是显示目的地名称的下拉菜单,例如伦敦、纽约等,但我不知道如何处理。

感谢任何帮助。

【问题讨论】:

标签: jquery html json html-select


【解决方案1】:

在您的 html 中创建一个<select> 标记,并使用value 属性将其填充为<option>Value 将是您的 destinationID,但它会显示 destinationName

Example

<form action="demo_form.asp">
    <select name="cars">
        <option value="volvo">Volvo XC90</option>
        <option value="saab">Saab 95</option>
        <option value="mercedes">Mercedes SLK</option>
        <option value="audi">Audi TT</option>
    </select>
    <input type="submit" value="Submit">
</form> 

【讨论】:

    【解决方案2】:

    试试这个代码:

    $.getJSON('yourfile.json', function(data) {
        destinations = data['Destinations']
    
        $.each(destinations, function(id, destination) {
            destination = destination["destinationName"]
            alert(destination)
        })
    });
    

    它允许你在目标变量中获取目标值,因为之后,可以用这个变量的值做任何事情。

    【讨论】:

      【解决方案3】:

      考虑到你已经收到来自服务器的响应,比如

      {
          "Destinations": [
          {
              "destinationName": "London",
              "destinationID": "lon"
          },
          {
              "destinationName": "New York",
              "destinationID": "nyc"
          },
          {
              "destinationName": "Paris",
              "destinationID": "par"
          },
          {
              "destinationName": "Rome",
              "destinationID": "rom"
          }
          ]
      }
      

      那么你的下一步应该是那个 json 的迭代

      $.each(data.Destinations, function(key, val) {
          items.append('<option value="' + val.destinationID + '">' + val.destinationName + '</option>');
        });
      

      你可以在这里看到演示Fiddle Demo

      【讨论】:

        【解决方案4】:

        像这样使用eachappend select

        $.each(data.Destinations, function(i, v) {
            $('#destinations').append('<option value="' + v.destinationID + '">' + v.destinationName + '</option>');
        });
        

        jsFiddle

        更新示例(http://jonathangatenby.co.uk/Candidate/json/destinations.json 的 test.html)

        <select id="destinations">
            <option value="">Select</option>
        </select>
        <a href="#" id="fetch">Fetch JSON</a>
        
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
        <script>
        $(document).ready(function() {
            $('#fetch').click(function() {
                $.post('http://jonathangatenby.co.uk/Candidate/json/destinations.json', {}, function(data) {
                    $.each(data.Destinations, function(i, v) {
                        $('#destinations').append('<option value="' + v.destinationID + '">' + v.destinationName + '</option>');
                    });
                });
            });
        });
        </script>
        

        确保 html 文件或您从中创建 ajax call 的文件位于同一域 (jonathangatenby.co.uk) 上的示例工作

        【讨论】:

        • 嗨,在您的 jsFiddle 示例中,它确实收集了目的地,但是您如何从外部文件而不是 Javascript 中收集 JSON?
        • 用您的url 更改网址'/echo/json/' 并从urljson 格式返回响应
        • 对不起,您可能完美地解释了这一点,但我想我错过了。例如,jonathangatenby.co.uk/Candidate/json/destinations.json 是我将尝试使用的 JSON URL 文件,这将替换 '/echo/json/?
        • 是的,但是 html 文件或您从中制作 ajax call 的文件应该在同一 domain jonathangatenby.co.uk 上。答案已更新。
        • 感谢您迄今为止的所有帮助,但恐怕仍然没有运气。我已经复制了您提供的代码,但是当按下“获取 JSON”时,没有获取任何内容。对此我深表歉意,非常感谢您的帮助。
        猜你喜欢
        • 2016-08-26
        • 2021-01-28
        • 1970-01-01
        • 2012-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        相关资源
        最近更新 更多