Прикрепление src-файла изображения из объекта json с помощью jQuery

#json #jquery #jsonp

#json #jquery #jsonp

Вопрос:

Я пытаюсь извлечь содержимое из объекта JSON и отобразить его на странице. Я могу извлечь объект и выполнить итерацию, чтобы извлечь различное содержимое и отобразить в блоках divs. Цель состоит в том, чтобы отобразить аватар изображения, имя и фамилию. С помощью приведенного ниже кода я могу отобразить имя и фамилию, но изображение всегда отображается как последнее изображение в списке для каждого изображения. Как я могу получить URL-адрес и добавить его к изображению, которое я создаю в каждом div?

 $(document).ready(function() {
    $.getJSON('http://www.url.com/?callback=?', function(data) {
       $.each(data, function(index, entry) {
            var html = '<div class="entry">';
            html  = '<img/>';
            var createImageURL = function() {
                var thisImg = entry.AvatarUrl;
                var thisPic = $('.entry img');  
                $(thisPic).attr('src',thisImg);
            }
            createImageURL();   
            html  = '<h3 class="first-name">'   entry.FirstName   '</h3>';
            html  = '<div class="last-name">'   entry.LastName   '</div>';

            html  = '</div>';
            $('#dictionary').append(html);
       });
     });
 });
  

Вот пример данных в формате JSON:

 {
"AvatarUrl":"http://www.gravatar.com/avatar/35b2d5391e4a766e57d0d1f4a767f61f?s=120amp;d=retro",
"Id":4,
"FirstName":"Aimee",
"LastName":"Lacariere",
"Location":"Seattle, Washington"
}
  

Ответ №1:

Сначала этот код:

 var thisPic = $('.entry img'); 
  

Вернет массив всех изображений, созданных в цикле each(). Возможно, вы имели в виду сделать значение класса в первых разделах уникальным?

Но на самом деле вам не нужно вызывать функцию для установки атрибута. Просто добавьте его непосредственно в строку:

 var html = '<div class="entry">';
html  = '<img src="'   entry.AvatarUrl   '" alt="avatar" />';
html  = '<h3 class="first-name">'   entry.FirstName   '</h3>';
html  = '<div class="last-name">'   entry.LastName   '</div>';
html  = '</div>';
  

Ответ №2:

Вы должны сделать это следующим образом:

 $(document).ready(function() {
    $.getJSON('http://www.url.com/?callback=?', function(data) {
       $.each(data, function(index, entry) {
            $html = $('<div class="entry" />');
            $html.append('<img/>');
            var createImageURL = function() {
                var thisImg = entry.AvatarUrl;
                var thisPic = $('.entry img', $html);  //This was your most conflicting line
                $(thisPic).attr('src',thisImg);
            }
            createImageURL();   
            $html.append('<h3 class="first-name">'   entry.FirstName   '</h3>');
            $html.append('<div class="last-name">'   entry.LastName   '</div>');

            $('#dictionary').append($html);
       });
     });
 });
  

Как вы можете видеть, мы используем append вместо объединения. Ваша ошибка была в var thisPic = $('.entry img'); селекторе, потому что он будет искать во всем документе. При этом:

 $('.entry img', $html);
  

мы выбираем изображение только внутри только что созданного html.
Надеюсь, это поможет. Приветствия

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

1. Похоже, это не работает. Приведенный ниже ответ от Woodszy, похоже, решил проблему таким образом, который работает хорошо. Спасибо.

Ответ №3:

Я полагаю, проблема в том, что вы создаете несколько разделов для записи класса, а затем переназначаете src-файл img в div каждый раз, когда выполняете цикл по своему коду. Вместо вызова функции createurl добавьте эту строку:

 html  = '<img src="'   entry.AvatarUrl   '"/>'; 
  

и удалите функцию

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

1. Спасибо, это работает отлично. Я понял, что я нацеливался на класс div, который будет повторяться, но я не мог понять, как добавить объект AvatarUrl непосредственно в src .attr . Еще раз спасибо.