javascript变量被多次调用函数覆盖

时间:2018-05-02 20:08:38

标签: javascript

我有以下功能来检查是否存在文件。 它被调用4次,一个接一个,检查不同的文件。 它适用于第一个文件,但不适用于后续文件。 我认为一定是因为本地/全局变量的位置,但无法弄明白......任何想法?

 <script>

function checkfile(fileNamePassed){

    var timerForLoadingResult=setInterval( function() { checkServerForFile(fileNamePassed); }, 4000 );
    function checkServerForFile(fileNamePassed) {    
          $.ajax({
                    url: 'https://myserver.com/'+fileNamePassed+'.txt',
                    type:'HEAD',
                    error: function()
                    {

                    },
                    success: function()
                    {
                        $("#"+fileNamePassed).hide();
                        clearInterval(timerForLoadingResult)  
                    }
                });
            }

}

</script>

1 个答案:

答案 0 :(得分:0)

checkServerForFile移除checkfile并传入参考 致电timerForLoadingResultcheckServerForFile

我编辑了我的答案以反映一些真实数据,因为我没有后端可以使用,但概念是相同的。

删除timerForLoadingResult的依赖关系并将其作为引用传递,强制checkServerForFile使用它的引用值而不是它们共享timerForLoadingResult

您可能还想更改timerForLoadingResult的名称,因为setInterval会返回ID

来自Docs

  

它返回一个唯一标识间隔的间隔ID,因此您可以稍后通过调用clearInterval()将其删除。

function checkfile(idPassed) {

  var timerForLoadingResult = setInterval(function() {
    checkServerForFile(idPassed, timerForLoadingResult);
  }, 4000);
}

function checkServerForFile(idPassed, timerForLoadingResult) {
  $.ajax({
    url: 'https://api.github.com/users/justinjmnz',
    error: function() {

    },
    success: function(data) {
      console.log(idPassed + " found!"); // Your file was found

      $("#" + idPassed).append('<img src="' + data.avatar_url + '" height="50" width="50"/ >');
      clearInterval(timerForLoadingResult)
    }
  });
}

checkfile("foo");
checkfile("bar");
checkfile("foobar");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="foo">

</div>

<div id="bar">

</div>

<div id="foobar">

</div>