Результат JSON, содержащий только один элемент - PullRequest
0 голосов
/ 13 сентября 2009

Я, вероятно, что-то упустил с JSON и JavaScript.

[{"commentText":"Testing 123","userPosted":"maxfridbe"},
{"commentText":"Testing 23","userPosted":"maxfridbe"}]

Иногда я получаю несколько ответов, которые работают с этим кодом:

function(data) 
        {
            var sel = this;

            jQuery.each(data,
                function()
                {
                    sel.append("<li>"+ this.userPosted+ "-" + this.commentText + "</li>");
                });          
        };

Иногда я получаю только один ответ, который нарушает код выше:

[{"commentText":"another test again welcom","userPosted":"maxfridbe"}]

Я знаю, что это потому, что ответ обрабатывается иначе, чем список.

Ища ответ на этот вопрос, я получаю некоторую неожиданность. Любое решение будет с благодарностью.

Ответы [ 3 ]

7 голосов
/ 13 сентября 2009

Во втором примере, который вы предоставляете, кажется, что это массив только с одним элементом, если он такой, он должен работать, но я думаю, что вы получаете только один объект, такой как:

{"commentText":"another test again welcom","userPosted":"maxfridbe"}

Если это один объект $.each перебирает свойства объекта.

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

//..
if (!jQuery.isArray(data))  data = [data]; // if isn't an array, wrap it

jQuery.each(data, function() {
  sel.append("<li>"+ this.userPosted+ "-" + this.commentText + "</li>");
});
//..
1 голос
/ 13 сентября 2009

Я думаю, что вы должны использовать некоторые дополнительные параметры в вашей функции each ():

function(data) 
    {
        var sel = this;

        jQuery.each(data,
            function(i, item)
            {
                sel.append("<li>"+ item.userPosted+ "-" + item.commentText + "</li>");
            });          
    };

использование ЭТОГО ключевого слова создает путаницу в вашем случае

Надеюсь, это поможет

0 голосов
/ 13 сентября 2009

Игра с решением CMS заставила меня понять, что данные были просто строкой так:

if (!jQuery.isArray(data))  data = eval(data);

работал, потому что тогда данные были объектом. Не уверен, почему, когда есть несколько результатов, это дает вам оценку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...