簡體   English   中英

我無法返回我的json對象

[英]I can't return my json object

我在返回JSON對象時遇到麻煩,相反,我得到的只是一個未定義的變量。

該代碼應從API返回json元素。 它似乎在成功的函數中起作用,但是一旦我嘗試將數據帶到其他地方,它只會顯示“未定義”

var datas;
datas = getdata();
//getdata();
createChart(datas)

alert('2datass'+datas); // this returns undefined

function createChart(data){
    alert(data); //outputs undefined
}

function getdataaa(){
    alert('ajax');
    $.ajax({
        type: "GET",
        dataType: "json",
        url: "API URL",
        success: function(data){

            alert(data); // WORKS! and outputs my JSON data
            /*
              for(var i =0;i <= data.length-1;i++)
              {
              var item = data[i];

              datas = datas + {
              type: 'column',
              name: item.name,
              data: [item.difference]
              };
              }
            */

            //Neither of these returns seems to work
            return jQuery.parseJSON(data);
            return data;
        }
    });
};

任何幫助,將不勝感激。

感謝所有提供幫助的人。

這似乎可以解決問題

        var datas;
        datas = getData();
        //getdata();

        alert('2datass'+datas);
        console.log(datas);
        createChart(datas);


        function createChart(data){

            alert('createChart'+data);
            var dynamicData;


                    for(var i =0;i <= data.length-1;i++)
                    {
                        var item = data[i];

                        dynamicData = dynamicData + {
                            type: 'column',
                            name: item.name,
                            data: [item.difference]
                        };

                    }

            alert('dynamic' +dynamicData); // works, but says undefined before - outputs dynamic undefined[object Object][object Object][object Object][object Object][object Object]



            var series = [dynamicData,{
                    type: 'column',
                    name: 'Jane',
                    data: [300, 30]
                }, {
                    type: 'column',
                    name: 'John',
                    data: [-200, 50]
                }, {
                    type: 'column',
                    name: 'Joe',
                    data: [444, -25]
                }, {
                    type: 'column',
                    name: 'Jobe',
                    data: [444, -25]
                }, {
                    type: 'column',
                    name: 'Jooe',
                    data: [444, -25]
                },{
                    type: 'column',
                    name: 'Jane',
                    data: [300, 30]
                }
                , {
                    type: 'pie',
                    name: 'Total consumption',
                    data: [{
                            name: 'Jane',
                            y: 13
                            //color: '#4572A7' // Jane's color
                        }, {
                            name: 'John',
                            y: 23
                            //color: '#AA4643' // John's color
                        }, {
                            name: 'Joe',
                            y: 19
                            //color: '#89A54E' // Joe's color
                        }],
                    center: [30, 80],
                    size: 100,
                    showInLegend: false,
                    dataLabels: {
                        enabled: false
                    }
                }];




            var options = {
                chart: {
                    renderTo: 'container'
                },
                title: {
                    text: 'Account Managers Leaderboard'
                },
                xAxis: {
                    categories: ['Month on Month', 'Day on Day']
                },
                tooltip: {
                    formatter: function() {
                        var s;
                        if (this.point.name) { // the pie chart
                            s = ''+
                                this.point.name +': '+ this.y +' sales';
                        } else {
                            s = ''+
                                this.x  +': '+ this.y;
                        }
                        return s;
                    }
                },
                labels: {
                    items: [{
                            html: 'Total proportion of sales <br />this month',
                            style: {
                                left: '40px',
                                top: '-5px',
                                color: 'black'
                            }
                        }]
                },
                series: series
            };

            $(document).ready(function() {
                var chart;
                chart = new Highcharts.Chart(options);
            });

        }



       function getData(){
            //alert('ajax');

            var receivedData; // store your value here
            $.ajax({
                type: "GET",
                dataType: "json",
                url: "API URL",
                async: false,
                success: function(data){
                    alert('data'+data); //works
                    receivedData = data;
                }
            }); 

            return receivedData;
        };

默認情況下,AJAX調用是異步的,您必須使用以下方法從ajax調用返回響應:

function getdataaa() {
    return $.ajax({ 
        type: "GET",
        dataType: "json",
        url: "API URL",
        async: false // NOTICE THIS
    }).responseText; // AND THIS
};

我不確定responseText是將解析還是未解析的JSON,但是會看到從那里得到的信息。

代替:

 return jQuery.parseJSON(data);

要么

 return data;

直接調用createChart函數:

createChart(data)

問題是您從success函數返回,而不是從getdataaa函數返回。 getdataaa沒有return語句,因此默認情況下返回undefined Return語句引用最近的函數。

success: function(data){
   alert(data); // WORKS! and outputs my JSON data
   ...
   //Neither of these returns seems to work
   return jQuery.parseJSON(data);
   return data;
}

這就是你得到的。 您可以使用像這樣的閉包來獲得結果:

function getdataaa(){
    alert('ajax');

    var receivedData; // store your value here
    $.ajax({
        type: "GET",
        dataType: "json",
        url: "API URL",
        async: false,
        success: function(data){

            alert(data);

            // ...

            receivedData= data;
        }
    });

    return receivedData;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM