1

我创建了一个带有以下函数的小型 JavaScript 应用程序,该函数调用一个函数来检索 JSON 数据:

var months = function getMonths(){

$.getJSON("app/data/Cars/12Months", function (some_data) {
    if (some_data == null) {
        return false;
    }

    var months_data = new Array();
    var value_data = new Array();

    $.each(some_data, function(index, value) {
        months_data.push(index);
        value_data.push(value);
   });

    return[months_data,value_data];
});

}

然后,我在同一个文件中创建了另一个在加载特定页面时执行某些操作的函数。在这个函数中,变量“months”被传递给变量“result”。

$(document).on('pageshow', '#chartCar', function(){

$(document).ready(function() {


    var result = months;
    var date = result[0];
    var values = result[1];

//more code here...

});
}

问题是,基于调试器,getMonths() 函数工作正常并产生预期的输出,但第二个函数中的“结果”变量无法获得变量“月”传递给它的值。你知道如何解决这个问题吗?

4

3 回答 3

2

问题是您的$.getJSON()函数是异步的,因此您的数据稍后会加载,然后再读取。有两种解决方法:
1. 将您的替换$.getJSON$.ajax和设置async: false
2. 将您的代码放入$.getJSON回调中:

var months = function getMonths(){

$.getJSON("app/data/Cars/12Months", function (some_data) {
    if (some_data == null) {
        return false;
    }

var months_data = new Array();
var value_data = new Array();

$.each(some_data, function(index, value) {
    months_data.push(index);
    value_data.push(value);


}); 

var date = months_data;
var values = value_data;
//more code here..
    })
    }
于 2013-03-06T10:11:01.080 回答
0

一定有语法错误。

代替

});
}

});
});
于 2013-03-06T10:06:49.130 回答
0

$.getJSON()是一个包装器$.ajax,默认情况下是异步的。但是您将其视为同步调用。

您可以使用$.ajaxSetup()

$.ajaxSetup( { "async": false } );
$.getJSON(...)
$.ajaxSetup( { "async": true } );

$.ajaxasync: false

$.ajax({
    type: 'GET',
    url: 'app/data/Cars/12Months',
    dataType: 'json',
    async: false,
    success: function(some_data) { 
        //your code goes here
    }
});

或者如果可能的话,改变你的应用程序的行为,以便你在回调函数中处理你的数据。

于 2013-03-06T10:14:12.483 回答