jQuery getJSON () не работает должным образом - PullRequest
1 голос
/ 19 августа 2011

То, что у меня есть ..

$.getJSON('ui-DashboardWidgetsGet.php', function(msg)
    {
        alert(msg);
        if(msg.error == "yes"){console.log('Error Found: '+ msg.errorMsg);}
        else
        {
            ztsDashboardJSON = msg;
        }
    });
var ztsDashboardJSONCount = ztsDashboardJSON.widgets[0].length;

, который сбрасывает

{ "widgets": [{ "column1": [ {"weight": 1, "bID": 1, "hideMe": false, "collapse": false, "titleOf": "Test 1", "colorOf": "color-yellow", "theFunction": "functionName"}, {"weight": 2, "bID": 2, "hideMe": false, "collapse": false, "titleOf": "Test 2", "colorOf": "color-green", "theFunction": "functionName"}, {"weight": 3, "bID": 3, "hideMe": false, "collapse": false, "titleOf": "Test 3", "colorOf": "color-blue", "theFunction": "functionName"} ], "column2": [ {"weight": 1, "bID": 4, "hideMe": false, "collapse": false, "titleOf": "Test 4", "colorOf": "color-white", "theFunction": "functionName"}, {"weight": 2, "bID": 5, "hideMe": false, "collapse": false, "titleOf": "Test 5", "colorOf": "color-red", "theFunction": "functionName"}, {"weight": 3, "bID": 6, "hideMe": false, "collapse": false, "titleOf": "Test 6", "colorOf": "color-orange", "theFunction": "functionName"} ], "column3": [ {"weight": 1, "bID": 7, "hideMe": false, "collapse": false, "titleOf": "Test 7", "colorOf": "color-white", "theFunction": "functionName"}, {"weight": 2, "bID": 8, "hideMe": false, "collapse": false, "titleOf": "Test 8", "colorOf": "color-green", "theFunction": "functionName"}, {"weight": 3, "bID": 9, "hideMe": false, "collapse": false, "titleOf": "Test 9", "colorOf": "color-blue", "theFunction": "functionName"} ] }]}

, который действителен согласно http://jsonlint.com/

Он запрашивает php, который выводит это эхоот БД, это эхо только это, ничего больше.Тем не менее, я пытаюсь работать с результатом в JavaScript после этого, и, похоже, он не дает мне то, что я хочу ..

моя ошибка:

ztsDashboardJSON.widgetsне определено [Прервать эту ошибку] ​​var ztsDashboardJSONCount = ztsDashboardJSON.widgets [0] .length;

1 Ответ

3 голосов
/ 19 августа 2011

Вам необходимо:

var ztsDashboardJSONCount = ztsDashboardJSON.widgets.length; // length is 1

, поскольку "виджеты" - это ключ, сопоставленный с массивом объектов.

Если вы пытаетесь получить длину столбца, вы можетеdo:

ztsDashboardJSON.widgets[0].column1.length; // length is 3

Демонстрация здесь.

Чтобы пройти ваш объект, чтобы использовать все виджеты, столбцы и значения столбцов, выможно сделать это:

var widgets = ztsDashboardJSON.widgets;

$.each(widgets, function(i, val) {
    console.log("widget number" + i);
    $.each(val, function(i2, val2) {
        console.log(i2);
        $.each(val2, function(i3, val3) {
            console.log(val3.weight);
            console.log(val3.bID);
            console.log(val3.hideMe);
            console.log(val3.titleOf);
            console.log(val3.colorOf);
            console.log(val3.theFunction);
        });
    });
});

Демо здесь.

...