Я думаю, что я тупой ... но я не могу правильно получить вывод JSON - PullRequest
3 голосов
/ 22 марта 2012

Я пытаюсь построить корзину.

Существует очень простой класс, который создает generic.dictionary(of string, generic.dictionary(of string, string), в котором содержатся мои элементы корзины.

Ключами для исходного словаря являются идентификаторы товаров, поэтому я могу легко проверить, есть ли товар в корзине, используя cartDictionary.ContainsKey(id), а затем увеличить количество или добавить новый по мере необходимости.

Кнопка BUY запускает и AJAX-ified веб-метод, который возвращает данные в следующем виде:

{
    "d": {
        "7907": {
            "id": "7907",
            "qty": "4",
            "singlePrice": "1185"
        },
        "2698": {
            "id": "2698",
            "qty": "1",
            "singlePrice": "1322"
        }
    }
}

Исходный элемент d создается автоматически постом AJAX по причинам, которые я не понимаю, но это не имеет большого значения, поэтому мой вывод data.d в моем успехе AJAX, следующим образом:

success: function (data) {
    result = [data.d];
}

Теперь из этого я должен иметь возможность получить внутренние данные, чтобы представить их в корзину для покупок

Так что мне нужно иметь возможность перебирать элементы по идентификатору и извлекать

id
qty
singlePrice

Так что я могу отобразить это в браузере, но я собираюсь косоглазие, пытаясь решить это.

Я пытался добавить [ вокруг data.d, например

var result = [data.d]

и попытался зациклить в результате, как

result = [data.d];

    $(result).each(function (i, thing) {
         var thisOne = (result[i]);
         //alert(thing); //<< returns object object
         $(thisOne).each(function (j, val) {
              alert(thisOne + " - " + val.id); //<< both thisOne and val.id return object object
         });
     });

По результатам оповещений я очищаюсь, получая какие-то JSON-объекты, но я, очевидно, что-то перепутал!

Я не программист, но работаю над проектом, который постепенно сводит меня с ума !!

Ответы [ 4 ]

1 голос
/ 20 сентября 2012
success: function (data) {
    var d = $.parseJSON(data.d);
    for(var i =0;i<d.length;i++)
    {     
        alert("Id is"+d[i].id);
    }
}
1 голос
/ 22 марта 2012

Вы должны сделать

var data = {
    "d": {
        "7907": {
            "id": "7907",
            "qty": "4",
            "singlePrice": "1185"
        },
        "2698": {
            "id": "2698",
            "qty": "1",
            "singlePrice": "1322"
        }
    }
}



var result = data.d;

$.each(result , function(ind, el) {
    //alert(thing); //<< returns object object
    alert(ind + " - " + el.id);
});

скрипку здесь http://jsfiddle.net/VHPQX/

0 голосов
/ 22 марта 2012

Вы можете просто использовать цикл for..in:

for (key in data.d)
{
    document.write(key + '<br>')
    document.write('<blockquote>')
    document.write('id: ' + data.d[key].id + '<br>')            
    document.write('qty: ' + data.d[key].qty + '<br>')            
    document.write('singlePrice: ' + data.d[key].singlePrice + '<br>')            
    document.write('</blockquote>')
}

Результат:

2698
    id: 2698
    qty: 1
    singlePrice: 1322
7907
    id: 7907
    qty: 4
    singlePrice: 1185

JSFiddle: http://jsfiddle.net/qnqWK/

0 голосов
/ 22 марта 2012

Вам нужно использовать универсальный итератор jQuery $.each() вместо его итератора объекта jQuery $().each():

success: function (data) {
    $.each(data.d, function(k, val) {
       // "val" is the current item, so use its properties here, e.g.:
       var id = val.id,
           total = +val.qty * +val.singlePrice;
    });
}

(Простая демонстрация: http://jsfiddle.net/2vvfZ/)

Обратите внимание, что при переборе свойств объекта порядок не гарантируется (и когда я проверял это в Chrome, он сделал элемент 2698, а затем элемент 7907). Если вам нужно быть уверенным в порядке, используйте массив объектов.

...