цикл jQuery $ .each и данные json - PullRequest
1 голос
/ 12 мая 2011

Кажется, я не могу заставить это работать, я извлекаю некоторые данные json и просто пытаюсь просмотреть их и добавить в DIV. вот мой код:

КАК ВОЗВРАЩАЕТСЯ JSON (PHP)

{"list":[{"subscribe":"example"},{"subscribe":"example2"},{"subscribe":"example3"},{"subscribe":"example4"},{"subscribe":"example5"}]}

МОЙ JSON CALL С ИСПОЛЬЗОВАНИЕМ JQUERY

$.getJSON("article.php",function(data)
   $.each(data.list, function(i,data) {
      var listData = "<li>" + data.subscribe + "</li>";
      $('#lists').append(listData);
   });
});

Я не получаю никаких ошибок в консоли, но ничего не происходит, я знаю, что вызов успешен, я правильно выполняю цикл .each? Может кто-нибудь, пожалуйста, помогите?

Ответы [ 3 ]

5 голосов
/ 12 мая 2011

Может быть, вы можете попробовать это:

$.each(data.list, function(i, item) {
    var listData = "<li>" + item.subscribe + "</li>";
    $('#lists').append(listData);
});

Просто измените function(i, data) на function(i, item).

Повторно используя имя переменной data в том виде, в каком вы есть, вы фактически не выполняете цикл по массиву, как ожидаете.

2 голосов
/ 12 мая 2011

Лично я не использовал $.each для цикла по массиву, потому что я всегда просто делаю цикл for, так что вы можете попробовать это:

$.getJSON("article.php", function (d) {
    var listsDiv = $("#lists");

    for (var i = 0; i < d.list.length; i++) {
        listsDiv.append("<li>" + d.list[i].subscribe + "</li>");
    };
});

Я на 99% уверен, что это должно работать для того, что вам нужно. Кроме того, лучше иметь переменную для вашего div вне цикла и добавлять в цикл, потому что сейчас ваш код просматривает DOM для этого div для каждого объекта в вашем списке JSON.

Кроме того, я не уверен, что вы усекаете ответ JSON, но вы можете присоединить свойство 'success' и проверить это. Таким образом, ваш код будет обновлен до этого:

$.getJSON("article.php", function (d) {
    if (d.success) {
        var listsDiv = $("#lists");

        for (var i = 0; i < d.list.length; i++) {
            listsDiv.append("<li>" + d.list[i].subscribe + "</li>");
        };
    } else {
        // Do something else to notify the user that the data could not be retrieved.
    };
});
1 голос
/ 12 мая 2011

Кажется, вы получили синтаксическую ошибку.A {отсутствует после первой строки, т.е. начальная {для "function (data)" в первой строке

...