我有这样的方法
var getStatus = function (tr, startTime, endTime) {
var toReturn ="";
$.getJSON('../java_output/bugs.json', function (dataOuter) {
//random code here//
//code causes changes to 'toReturn'
});
return (toReturn);
}
基本上,我调用getStatus
并获取一个返回值,这取决于getJSON文件。但是,因为它是一种回调方法,我不会获得当前版本的toReturn
,而是获取""
作为值,因为它是如何初始化的
答案 0 :(得分:2)
这是因为$.getJSON
是异步调用。我认为你没有多少选择:
getStatus
成为异步功能。所以让它接受一个回调函数,并将其传递给$.getJSON
,或者在传递给$.getJSON
的回调函数中调用它。$.getJSON
的处理函数中,您可以解析承诺,也可以传递响应,或者在出错时拒绝它。另请参阅此问题,这是一个类似的案例:Wait Ajax finish to do other function
答案 1 :(得分:2)
使用回调!
var getStatus = function (tr, startTime, endTime, callback) {
var toReturn = "";
$.getJSON('../java_output/bugs.json', function (dataOuter) {
//changes..
callback(toReturn);
});
}
然后打电话给它!
getStatus(tr, start, end, function(data) {
//your toReturn value;
console.log(data);
});
答案 2 :(得分:1)
尝试
var getStatus = function (tr, startTime, endTime) {
toReturn = new $.Deferred();
$.getJSON("../java_output/bugs.json"
, function (dataOuter) {
//random code here//
//code causes changes to 'toReturn'
toReturn.resolve(dataOuter);
});
return toReturn.promise();
};
$.when(getStatus())
.done(function (_toReturn) {
// do stuff with `_toReturn`
console.log(_toReturn);
});