用户填写表单并单击提交,然后调用 utilsSubmit 函数。该函数设置一些变量,然后调用另一个开始读取文件的函数。如果文件不存在,它只会输出“连接到设备...”。一旦文件存在,它应该将输出放入一个 div 中。
在循环的同时,我通过 ajax 运行另一个脚本,该脚本写入一个文件(readFile 脚本正在寻找的同一个文件。)
问题是,在 utilsSubmit 中的 ajax 调用完成之前,不会调用 readFile 函数。如果我删除 setInterval“包装器”并只运行 readFile 函数,它将起作用,但是,我需要它继续寻找该文件,直到我告诉它停止(死人或文件中的某些字符串。)
我需要 readFile 函数来立即触发并将数据输出到浏览器。
function utilsSubmit(x){
var stuff = x;
file = "/path/to/file";
deadman = 1;
myTimer = setInterval(function() {
readFile(file);
}, 300);
$.ajax({
type: "POST",
url: "write_file.php",
data: {
"file": file
},
success: function(data) {
$("#networkUtils").html(data);
}
});
};
function readFile(x) {
var file = x;
$.ajax({
type: "POST",
url: "read_file.php",
data: {
"file": file
},
success: function(data) {
$("#networkUtils").html(data);
if (data.indexOf("END OF FILE")) {
clearInterval(myTimer);
}
}
});
if (deadman >= 1000) {
clearInterval(myTimer);
}
deadman++;
}
编辑 - 按照建议尝试 setTimout
但是,现在的问题是我无法退出循环。如果我尝试将 setTimeout 结果设置为 var,然后根据某些逻辑对该 var 进行 clearTimeout,则该函数仅在第一次运行(它不会循环。)
更新代码:
function utilsSubmit(x){
var name = x;
file = "/path/to/file";
deadman = 1;
var myTimer;
readFile(file);
// AJAX Call to Write to file...
};
function readFile(x) {
var file = x;
$.ajax({
type: "POST",
url: "read_file.php",
data: {
"file": file
},
success: function(data) {
$("#networkUtils").html(data);
if (data.indexOf("END OF FILE")) {
clearInterval(myTimer);
}
}
});
if (deadman >= 1000) {
clearInterval(myTimer);
}
deadman++;
myTimer = setTimeout(function(){
readFile(file);
}, 300)
}