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

时间:2015-07-07 16:49:34

标签: javascript

我有以下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();

2 个答案:

答案 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。以下是示例。

&#13;
&#13;
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;
&#13;
&#13;

相关问题