![](/img/trans.png)
[英]How do I run an asynchronous $.getJSON function within a loop in JavaScript?
[英]How do I use a jQuery function like $.getJSON() within a normal JS function?
我有這樣的方法
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
的當前版本,而是獲得""
作為值,因為這是它的初始化方式。
這是因為$.getJSON
是異步調用。 我認為您別無選擇:
getStatus
為異步函數。 因此,讓它接受回調函數,並將其傳遞給$.getJSON
,或在傳遞給$.getJSON
的回調函數中調用它。 $.getJSON
的處理函數中,您可以解析promise,還傳遞響應,或者在發生錯誤時拒絕它。 另請參見此問題,這是類似的情況: 等待Ajax完成以執行其他功能
使用回調!
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);
});
嘗試
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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.