Как перебрать множество пар значений JSON-объект

0

im пытается пропустить JSON-объект через JQuery. По какой-то причине он не зацикливается правильно. Кажется, что он полностью зацикливается до конца, но я хотел бы получить каждое индивидуальное свойство в моем объекте. Я использую цикл For (var in), который правильно проверяет мой объект, но его немного отключает. Помощь MyAny была бы оценена сладко.. спасибо большое! Я могу предоставить быструю ссылку на мой веб-сайт, который при необходимости придумал код. Ive также добавил больше кода и html через элементы, которые используют..Hint *** Theres more if - условные операторы, которые проверяют звуковые_подобные, sounds_price... Первый объект JSON работает без проблем, его второй объект JSON, который im использует с поп файлом, что вызывает у меня проблемы

    <div class="overlay-bg">
         <div id= "overlay" class="overlay-content">
             <p>This is a popup!</p>
          <button class="close-btn">Close</button>
        </div>
    </div>


        $.getJSON("php/music_data.php",function(data){
             $.each(data,function(key,obj){

                 for(var prop in obj){
                     // console.log("Property: " + prop + " key:" + obj[prop]);
                     if(prop === "sounds_like"){

                         results_div =  document.getElementById("results");
                         music_div_container = document.createElement("div");
                         music_div_container.id  = "music_data_container";
                         music_div_container.innerHTML = "<div id=\"sounds_like\">" + "Sounds Like: "  + obj["sounds_like"] +"</div>";
                         results_div.appendChild(music_div_container);

                         var pop_up = document.createElement("a");
                         pop_up.href = "#";
                         pop_up.className = "show-popup";
                         pop_up.innerHTML = "Click";
                         music_div_container.appendChild(pop_up);

                         default_photo = document.createElement('div');


                     }

                     if(prop === "sound_desc"){

                         var sound_desc = document.createElement("div");
                         sound_desc.innerHTML  = "<div id=\"sounds_desc\">" +        obj["sound_desc"] +"</div>";
                         music_div_container.appendChild(sound_desc);

                     }


     $.getJSON("php/music_data.php",function(data){
   $.each(data,function(idx,obj){

    $.each(obj,function(key,value){

        $(".show-popup").click(function(event){

            event.preventDefault();     
            $(".overlay-bg").show();

              if(key === "sounds_like"){
                          /***Should be Beyonce,Drake,Nicki Minaj***/
                          /*****But my console is showing Nicki Minaj*******/
                  $(".overlay-content").html(value);
              }
            if(value === "sounds_desc"){
                           /***Should be Smooth, Wu tang Forever, Barbie***/
                          /*****But my console is showing Barbie*******/
                $(".overlay-content").html(value);
             }


            $('.close-btn').click(function(){
                $('.overlay-bg').hide(); /*** hide the overlay ***/
            });

            $('.overlay-bg').click(function(){
                $('.overlay-bg').hide(); 
            });

            $('.overlay-bg').click(function(){
                return false;
            })
        });
    });

   })
 });

Объект JSON ниже

[{"id":"39","sounds_like":"Beyonce","sound_name":"Dance 4 u.mp3","sound_desc":"Smooth","sound_genre":"R&B","sound_price":"N/A","photo_path":"\/admin_data\/uploaded_artist_photos\/","photo_name":"beyonce.jpg"},
 {"id":"40","sounds_like":"Drake","sound_name":"Bottom.mp3","sound_desc":"Wu Tang Forever","sound_genre":"Rap","sound_price":"N/A","photo_path":"\/admin_data\/uploaded_artist_photos\/","photo_name":"drake.jpg"},
 {"id":"41","sounds_like":"Nicki Minaj","sound_name":"RomanReloaded.mp3","sound_desc":"Barbie","sound_genre":"Rap","sound_price":"N/A","photo_path":"\/admin_data\/uploaded_artist_photos\/","photo_name":"nickiminaj.jpg"}
]
  • 1
    Почему вы добавляете новый обработчик кликов для каждой итерации?
  • 0
    В чем проблема?
Показать ещё 7 комментариев

1 ответ

1
Лучший ответ

Когда вы зацикливаете сложный объект, используя цикл for for var, у вас всегда будет неожиданное поведение из-за того, как работает этот цикл.

Чтобы избежать таких проблем, и если вам нужно использовать этот тип цикла, я рекомендую вам сделать следующее:

Пример:

for (var i in obj) {
    if (obj.hasOwnProperty(i)) {  // this validates if prop belongs to obj 
        // do something
    }
}

ИЗМЕНИТЬ 1:

Я не уверен, что вы пытаетесь сделать, но используя jquery, вы можете сделать следующее:

$.getJSON("php/music_data.php", function (data) {

    $.each(data, function (i, value) {
        //alert(i + ": " + value.id);

        alert(value.sounds_like); 
        // this will have Beyonce , Drake, Nicki Minaj

    });

});

Еще одна вещь, которая кажется неправильной, заключается в том, что вы делаете событие click click для каждого цикла. Лучше делать это по-другому.

  • 0
    Но OP не является использование for петли для цикла. Они используют итерацию jQuery. Так что нет причин переключаться на это.
  • 0
    @ Sandcar, я пробовал это много раз, но мои свойства не отображаются правильно ..
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню