我创建了一个小型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()函数正常工作并产生预期输出,但第二个函数中的'result'变量无法获取变量'月传递给它的值”。你知道如何解决这个问题吗?
答案 0 :(得分: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..
})
}
答案 1 :(得分:0)
必定存在语法错误。
替换
});
}
使用
});
});
答案 2 :(得分:0)
$.getJSON()
是$.ajax
的包装器,默认情况下是异步的。但你把它当成同步电话。
您可以使用$.ajaxSetup()
$.ajaxSetup( { "async": false } );
$.getJSON(...)
$.ajaxSetup( { "async": true } );
或将$.ajax
与async: false
$.ajax({
type: 'GET',
url: 'app/data/Cars/12Months',
dataType: 'json',
async: false,
success: function(some_data) {
//your code goes here
}
});
或者如果可能的话,更改应用的行为,以便在回调函数中处理数据。