为什么这个javascript从未执行过?

为什么这个javascript从未执行过?,javascript,Javascript,我有以下javascript。我希望它做的是等待一个getJSON返回,其中设置了一个标志,然后做一些事情。然而,在找到下面的check函数之后,即使标志为true,我也无法实际将其加载到日志中,因此永远不会执行processData。我做错了什么 flag = false $.getJSON(<url>, function(params){ if (params){

我有以下javascript。我希望它做的是等待一个getJSON返回,其中设置了一个标志,然后做一些事情。然而,在找到下面的check函数之后,即使标志为true,我也无法实际将其加载到日志中,因此永远不会执行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();
您需要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,否则无论如何都不会到达超时。谢谢。忘了包括那一行。