为什么这个javascript从未执行过?
我有以下javascript。我希望它做的是等待一个getJSON返回,其中设置了一个标志,然后做一些事情。然而,在找到下面的check函数之后,即使标志为true,我也无法实际将其加载到日志中,因此永远不会执行processData。我做错了什么为什么这个javascript从未执行过?,javascript,Javascript,我有以下javascript。我希望它做的是等待一个getJSON返回,其中设置了一个标志,然后做一些事情。然而,在找到下面的check函数之后,即使标志为true,我也无法实际将其加载到日志中,因此永远不会执行processData。我做错了什么 flag = false $.getJSON(<url>, function(params){ if (params){
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();
您需要setTimeoutcheck,200;选择;而不是设置TimeOut200;。在运行函数之前,还必须显式地将flag设置为false
但是,您可以选择:
$.getJSON(<url>,
function(params){
if (params){
check();
}
}
);
var check = function() {
console.log("check A");
console.log("loaded!");
processData();
}
您可以使用JavaScript对象来完成这项工作,而不是定期检查JSON是否到达。下面是一个例子 var url='1〕http://www.html5rocks.com/en/tutorials/file/xhr2/'; 函数loadUrlurl{ var deferredLoad=$.Deferred; $.geturl,函数数据,状态{ 如果“成功”==状态{ deferredLoad.resolvedata; } }; 返回deliveredload.promise; } 功能文档就绪{ var deferredReady=$.Deferred; $document.readyfunction{ 延迟准备。解决; }; 返回延迟准备就绪。承诺; } $.whendocumentrady,loadUrlurl.then 函数ReadyRespond,数据{ $'content'.htmloaded页面如下:+data; };
更改设置超时200,检查;要设置超时检查,请选择200;。参数的顺序错误,因此不会再次执行检查。当然,真正的解决方案应该是将processData调用移动到$.getJSON回调中,这样就不需要标志或使用setTimeout。除非标志设置为false,否则无论如何都不会到达超时。谢谢。忘了包括那一行。