早安伙伴们。
我正在尝试制作一个小脚本来监视在服务器上启动的作业的状态。我有来自服务器的部分响应并且它工作正常,但是当我每 X 秒检查一次该活动时,我无法让脚本运行。
现在我只让它第一次运行,当按下一个特定的按钮时。当按下该按钮时,所有代码都被执行,它到达语句setInterval
,它调用一个traerEstado
带有两个参数的函数,并且该函数只执行一次......当我认为它应该每隔 X 秒执行一次时...... .
在 curl.php 的这个 ajax 中,唯一要做的就是将必要的参数传递给返回 idGenerated 的 curl 请求,然后我们需要将其传递给 fetchStatus 函数,以了解该作业 ID 是否仍在运行,如果它正在等待或是否已完成。
我附上我当前的代码:
$('.btnProcess').click(function() {
var opcion = $(this).data('opcion');
var server = $(this).data('server');
var folder = $(this).data('folder');
var file = $(this).data('file');
var param = "opcion=" + opcion + "&folder=" + folder + "&file=" + file + "&server=" + server;
var resultado = $('.btnProcess[data-folder="' + folder + '"]').parent();
var box = $('.idBox[data-folder="' + folder + '"]');
if (opcion == 'tercios') var remove = 'recibos';
else var remove = 'tercios';
$.ajax({
type: 'POST',
url: 'exec/curl.php',
data: {param: param, server:server, file:file},
success: function(idGenerado) {
resultado.html("<img src='img/loading.gif' height='20' class='imgLoading' style='vertical-align:middle;'> <span class='txt'>Generando: "+folder+".pdf</span>");
box.val(idGenerado);
console.log("EXITO: " + idGenerado);
},
error: function(idGenerado) {
resultado.html("<img src='img/loading.gif' height='20' class='imgLoading' style='vertical-align:middle;'> <span class='txt'>Generando: "+folder+".pdf</span>");
box.val(idGenerado);
console.log("ERROR: " + idGenerado);
}
});
var repeticiones = setInterval(traerEstado(idGenerado, server), 1000);
});
function traerEstado(ID, srv) {
$.ajax({
type: "POST",
url: "exec/serverData.php",
data: {idGenerado:ID, server:srv},
success: function(respuesta) {
console.log(respuesta);
}
})
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="btnProcess">Click Me</button>
serverData.php 文件,现在,只做一个echo date("H:i:s")
在函数中检索并在控制台上打印的文件,据我了解,它应该每秒显示控制台上的当前时间,但正如我所说,它只打印一次并静止不动。
您遇到的问题之一是以下行:
由于几件事情同时发生,我将它们分成两行,代码是完全等价的,但是当你看到它时,你肯定会注意到错误:
以及正确的做法:
另一方面,您应该等待 AJAX 响应触发此函数,否则 generateid 将
undefined
如下所示(需要进行更多更改,但您会明白的):在 setInterval 中,不可能在每个“x”时间执行我们传递一些变量的函数。这使得它只运行一次。
所以你有两种选择。选项 1:在不调用另一个函数的情况下执行。
选项 2:调用另一个函数而不将变量传递给它。