我有以下功能来检查是否存在文件。 它被调用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>
答案 0 :(得分:0)
从checkServerForFile
移除checkfile
并传入参考
致电timerForLoadingResult
时checkServerForFile
。
我编辑了我的答案以反映一些真实数据,因为我没有后端可以使用,但概念是相同的。
删除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>