-1

この呼び出しから、次のネストされた JSON オブジェクトがあります。

var jsonData = jQuery.ajax({
            url: "http://testsite/_vti_bin/listdata.svc/ProjectHours",
            dataType: "json",
            async: false
        }).responseText;

{
    "d": {
        "results": [
            {
                "__metadata": {
                    "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(1)",
                    "etag": "W/\"1\"",
                    "type": "Microsoft.SharePoint.DataService.ProjectHoursItem"
                },
                "ContentTypeID": "0x0100C5D130A92A732D4C9E8489B50657505B",
                "Title": "Ryan Cruz",
                "Hours": 35,
                "Id": 1,
                "ContentType": "Item",
                "Modified": "/Date(1373535682000)/",
                "Created": "/Date(1373535682000)/",
                "CreatedBy": {
                    "__deferred": {
                        "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(1)/CreatedBy"
                    }
                },
                "CreatedById": 19,
                "ModifiedBy": {
                    "__deferred": {
                        "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(1)/ModifiedBy"
                    }
                },
                "ModifiedById": 19,
                "Owshiddenversion": 1,
                "Version": "1.0",
                "Attachments": {
                    "__deferred": {
                        "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(1)/Attachments"
                    }
                },
                "Path": "/sites/itg/Resourcecenters/spwidgets/Lists/ProjectHours"
            },
            {
                "__metadata": {
                    "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(2)",
                    "etag": "W/\"1\"",
                    "type": "Microsoft.SharePoint.DataService.ProjectHoursItem"
                },
                "ContentTypeID": "0x0100C5D130A92A732D4C9E8489B50657505B",
                "Title": "Phillip Phillips",
                "Hours": 25,
                "Id": 2,
                "ContentType": "Item",
                "Modified": "/Date(1373535694000)/",
                "Created": "/Date(1373535694000)/",
                "CreatedBy": {
                    "__deferred": {
                        "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(2)/CreatedBy"
                    }
                },
                "CreatedById": 19,
                "ModifiedBy": {
                    "__deferred": {
                        "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(2)/ModifiedBy"
                    }
                },
                "ModifiedById": 19,
                "Owshiddenversion": 1,
                "Version": "1.0",
                "Attachments": {
                    "__deferred": {
                        "uri": "http://testsite/_vti_bin/listdata.svc/ProjectHours(2)/Attachments"
                    }
                },
                "Path": "/sites/itg/Resourcecenters/spwidgets/Lists/ProjectHours"
            }
        ]
    }
}

各オブジェクトの Title と Hours 属性をループして配列に保存し、以下のように Google チャートに渡すことができるようにします。

var data = google.visualization.arrayToDataTable(array);

次のコードを試しましたが、json オブジェクトが見つかりません。

function drawTable() {
    var jsonData = jQuery.ajax({
                url: "http://testsite/_vti_bin/listdata.svc/ProjectHours",
                dataType: "json",
                async: false
            }).responseText;

            alert(jsonData);
            var obj = jQuery.parseJSON(jsonData);
            //alert(jsonData.length);
            var sampleData = [], results = d.results;
            for (var i = 0, len = results.length; i < len; i++) {
                var result = results[i];
                sampleData.push({ Title: result.Title, Hours: result.Hours});
            }

            var data = google.visualization.arrayToDataTable(obj);
            var chart = new google.visualization.PieChart(document.getElementById('spChart')); 
            chart.draw(data, {showRowNumber: true}); 
}

一日中ここで立ち往生しないように、いくつかのアイデアを教えてください。ありがとうございました!

4

2 に答える 2

2
jQuery.getJSON({"http://testsite/_vti_bin/listdata.svc/ProjectHours",{},function(d) {
    var sampleData = [], results = d.results;
    for (var i = 0, len = results.length; i < len; i++) {
        var result = results[i];
        sampleData.push({ Title: results[i].Title, Hours: results[i].Hours});
    };
});
于 2013-07-11T18:03:45.677 に答える
0

OK、誰かが似たようなものに出くわした場合に備えて、ここで自分の質問に答えています。これは、JSON でリスト データを返す MS SharePoint サイトへの ajax 呼び出しでした。

jQuery.ajax({
        url: "http://testsite/_vti_bin/listdata.svc/ProjectHours",
        dataType: 'JSON',
        success:function(data) { 
          //jQuery('#spChart').append(JSON.stringify(json));
        //var obj = jQuery.parseJSON(data);
        var rowArray = [], results = data.d.results;

        for (var i=0; i < results.length; i++)
        {
           var result = results[i];           
           rowArray.push([result.Title, result.Hours]);
           //rowArray.push(["'" + result.Title + "'", result.Hours]);
        }

     },
        error:function(){
            alert("Error");
        }
    }); 

最初に返されるjsonを「データ」として参照し、その中の各javascriptオブジェクトにアクセスする必要data.d.results[0], data.d.results[1], data.d.results[2]がありました。

于 2013-07-11T20:20:52.413 に答える