从javascript函数返回一个值

时间:2014-10-26 21:35:13

标签: java javascript jquery arrays highcharts

我正在使用以下代码片段将一个双打java数组返回给另一个javascript函数。

    var getCredits = (function() {
    console.log('Getting credits');
    $.ajax({
        type : 'GET',
        url : rootURL+"/getCredits",
        dataType : "json", // data type of response
        success : function(data){
            var array = [];
            console.log('Credits data = '+data);
            for(var x in data){
                console.log('x = '+data[x]);
                array.push(data[x]);
            }
            console.log('credits array is '+array);
            return array;
        }
    });
});


var getDebits = (function() {
    var myArray = [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8];
    console.log('debits array is '+myArray);
    return myArray;
});

当我运行代码时 - 日志如下 -

  

"生成我的图表" myMain.js:110"获得积分" myMain.js:149   "借记数组为3.9,4.2,5.7,8.5,11.9,15.2,17,16.6,14.2,10.3,6.6,4.8"   myMain.js:169"积分数据= 10.7,20.5" myMain.js:156" x = 10.7"   myMain.js:158" x = 20.5" myMain.js:158" credits数组是10.7,20.5"

getDebits功能本质上是我想要的getCredits函数。 从日志看起来它看起来像我想要的 - 但我将它传递到另一个看起来像 -

的函数
var generateMyGraph = (function() {
    console.log("generating my graph");
    $('#myLineGraph').highcharts({
        chart: {
            type: 'line'
        },
        title: {
            text: 'Finances per month'
        },
        subtitle: {
            text: 'Credit and Debit per month'
        },
        xAxis: {
            categories: ['Sep', 'Oct', 'Nov', 'Dec', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug','Sep','Oct']
        },
        yAxis: {
            title: {
                text: 'Euro (€)'
            }
        },
        plotOptions: {
            line: {
                dataLabels: {
                    enabled: true
                },
                enableMouseTracking: true
            }
        },
        series: [{
            name: 'Credit',
            data: getCredits()
        }, {
            name: 'Debit',
            data: getDebits()
        }]
    });
});

它不起作用,有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

由于ajax调用异步从服务器获取响应,因此无法从ajax调用返回值,但可以在响应到达时调用函数。

因此,而不是尝试返回一个值:

return array;

调用需要此数据的函数并传递数据,因为此时您需要的数据可用:

generateMyGraph( array );

然后调整您的功能以接收和使用此数据:

var generateMyGraph = (function( arrData ) {  //<=== local alias to 'array'
//....
    series: [{
        name: 'Credit',
        data: arrData   //<===== use data here
    }, {
//......