Динамическая выборка данных из json с помощью метода get json и зацикливание значений

#javascript #json

#javascript #json

Вопрос:

У меня есть файл JSON, из которого я хочу создать динамические html-элементы со значениями JSON. Ниже приведен файл JSON:

 {
    "india": [
        {
            "position": "left",
            "imgurl":"3.jpg"
        },

        {
            "position": "right",
            "imgurl":"2.jpg"
        },

        {
            "position": "left",
            "imgurl":"3.jpg"
        },

        {
            "position": "right",
            "imgurl":"2.jpg"
        }
    ],

    "aus": [
        {
            "position": "left",
            "imgurl":"4.jpg"
        },

        {
            "position": "right",
            "imgurl":"2.jpg"
        },

        {
            "position": "left",
            "imgurl":"3.jpg"
        },

        {
            "position": "right",
            "imgurl":"2.jpg"
        }
    ]
}
  

Ниже приведен HTML-файл с кодом Javascript:

 <html>
<head>
  <title>The jQuery Example</title>
  <script type = "text/javascript" 
  src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

  <script type = "text/javascript" language = "javascript">
   $(document).ready(function() {

    $("#driver").click(function(event) {

        $.getJSON('list1.json', function(data) {

            $.each(data.india, function (key, val) {

                $('.ms-left').append('<div class="ms-section ' val.position '" id="left3"><img src="' val.imgurl '"></div>');

            });        
        });
    });
});
</script>
</head>      
<body>
  <p>Click on the button to load result.html file:</p>

  <div id = "stage" style = "background-color:#cc0;">
   STAGE</div>

<ul id="ul"></ul>
<div class="ms-left"></div>

<input type = "button" id = "driver" value = "india" />

<ul id="menu" class="">
    <li><a href="" data-value="india">India</a></li>
    <li><a href="" data-value="aus">Australia</a></li>
    <li><a href="" data-value="usa">USA</a></li>
</ul>       
</body>
</html>
  

Я хочу предоставить динамическую переменную для каждой функции, т.Е. $.each(data.india) .. Я хочу изменить India на AUS, USA динамически означает data.india, data.aus и т. Д., Чтобы .each создавать и извлекать значения из JSON в зависимости от параметров. Пожалуйста, помогите.

Как я могу передать динамический параметр в .each цикл, который поможет мне извлекать данные на основе стран, определенных в JSON? В настоящее время я могу статически изменять data.india, data.aus для извлечения значения, но я хочу, чтобы это выполнялось динамически.

У меня есть структура li выше в коде. Моя цель состоит в том, чтобы, когда я нажму на ссылку для Индии, она попадет в файл JSON со значением India и получит данные India, так же, как когда я нажму на ссылку AUS, он получит данные AUS из JSON.

Ответ №1:

@makemelive Пара предложений:

  • Поместите JS-код в конец <body> тега, а не внутри <head> .
  • Используйте согласованные отступы, либо табуляции, либо пробелы, предпочитайте пробелы, поскольку они универсальны.

И вот решение вашей проблемы:

 <html>
<head>
    <title>The jQuery Example</title>
</head>
<body>
    <div id="stage" style="background-color:#cc0;">STAGE</div>
    <div class="ms-left"></div>
    <ul id="menu" class="countries">
        <li><a href="#" data-value="india">India</a></li>
        <li><a href="#" data-value="aus">Australia</a></li>
        <li><a href="#" data-value="usa">USA</a></li>
    </ul>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script>
        var json = {
            "india": [
                {
                    "position": "left",
                    "imgurl": "3.jpg"
                },
                {
                    "position": "right",
                    "imgurl": "2.jpg"
                },
                {
                    "position": "left",
                    "imgurl": "3.jpg"
                },
                {
                    "position": "right",
                    "imgurl": "2.jpg"
                }
            ],
            "aus": [
                {
                    "position": "left",
                    "imgurl": "4.jpg"
                },
                {
                    "position": "right",
                    "imgurl": "2.jpg"
                },
                {
                    "position": "left",
                    "imgurl": "3.jpg"
                },
                {
                    "position": "right",
                    "imgurl": "2.jpg"
                }
            ]
        };
    </script>
    <script>
        var populate = function (country) {
            $('.ms-left').empty();
            $.each(json[country], function (key, value) {
                var _div = $('<div>')
                    .addClass('ms-section')
                    .addClass(value.position)
                    .append($('<img>').attr('src', value.imgurl));

                $('.ms-left').append(_div);
            });
        };

        $(document).ready(function() {

            /**
             * Get your JSON here and store it in a local variable,
             * loading the file for each case is not a good practice
             * if the file is always the same.
             */

            $('.countries a').each(function() {
                $(this).on('click', populate.bind(this, $(this).data('value')));
            });
        });
    </script>
</body>
</html>
  

Комментарии:

1. Привет, большое спасибо за это .. не могли бы вы сообщить мне, хочу ли я сначала сгенерировать позицию: сначала левые значения, а затем правые значения, например :—

2. Хотите сгенерировать так: — <div class=»ms-left»> <div class=»ms-section left» id =»left1″> <img src=»images/img-1.jpg «> </div>> <img src=»images/img-2.jpg «> </div> <div class=»ms-раздел слева» id=»left3″> <img src=»images/img-3.jpg «> </div> </div>

3. Все левые значения в одном div и все правильные значения в другом div… Я вставляю свою HTML-структуру ниже того, как я хочу сгенерировать: — НИЖЕ НАХОДИТСЯ ЛЕВЫЙ РАЗДЕЛ <div class=»ms-left»> <div class=»ms-section left» id =»left1″> <img src=»images/img-1.jpg «> </div>=»ms-section left» id =»left2″> <img src=»images/img-2.jpg «> </div> <div class=»ms-раздел слева» id=»left3″> <img src=»images/img-3.jpg «> </div> </div>

4. НИЖЕ ПРИВЕДЕН ПРАВЫЙ РАЗДЕЛ <div class=»ms-right»> <div class=»ms-section» id=»right1″> <img src=»images/img-4.jpg «> </div> <div class=»ms-section» id=»right2″>=»images/img-5.jpg «> </div> <div class=»ms-section» id=»right3″> <img src=»images/img-6.jpg «> </div> </div>

5. @makemelive хотя я рад помочь, stackoverflow.com на самом деле это не сообщество, где люди будут выполнять вашу работу, мы здесь для того, чтобы помочь вам решить проблемы. Ответ, который я дал вам раньше, в значительной степени решал всю проблему. Следующая задача, которую вы пытаетесь выполнить, — это просто вопрос логики, и я уверен, что вы сможете с этим справиться. 🙂