我有以下javascript。我想要它做的是等到getJSON
返回,其中设置了一个标志,然后做一些事情。但是,在SO上面找到check
函数之后,即使loaded
为真,我实际上也无法记录flag
(因此永远不会执行processData
)。我做错了什么?
flag = false
$.getJSON(<url>,
function(params){
if (params){
flag = true;
}
}
);
var check = function() {
console.log("check A");
if (flag === false) {
console.log('still going to check');
return setTimeout(200, check);
}
console.log("loaded!");
processData();
}
check();
答案 0 :(得分:6)
您需要setTimeout(check, 200);
而不是setTimeout(200, check);
。在运行函数之前,您还必须将flag
显式设置为false。
但是,您可以选择:
$.getJSON(<url>,
function(params){
if (params){
check();
}
}
);
var check = function() {
console.log("check A");
console.log("loaded!");
processData();
}
答案 1 :(得分:1)
您可以使用JavaScript promise and deferred对象为您完成工作,而不是定期检查要到达的JSON。以下是示例。
var url = 'http://www.html5rocks.com/en/tutorials/file/xhr2/';
function loadUrl(url) {
var deferredLoad = $.Deferred();
$.get(url, function(data, status) {
if ('success' == status) {
deferredLoad.resolve(data);
}
});
return deferredLoad.promise();
}
function documentReady() {
var deferredReady = $.Deferred();
$(document).ready(function() {
deferredReady.resolve();
});
return deferredReady.promise();
}
$.when(documentReady(), loadUrl(url)).then(
function(readyRespond, data) {
$('#content').html("Loaded page is below:" + data);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="content">
&#13;