Я внедряю приложение, которое может отслеживать фоновые задания (Программа BLAST).
Мне бы хотелось, чтобы, когда PID равнялся 0, тогда останавливался процесс опроса.
Но в моем длинном примере опроса процесс опроса продолжает выполняться даже при использовании abort()
функция.
Это решение не работает для меня.
var poll_xhr;
(function doPoll() {
setTimeout(function() {
poll_xhr = $.ajax({
type: 'GET',
url: 'longpoll.php',
error: function (request, textStatus, errorThrown) {
displayError();
},
success: function(result) {
if (result == 0) {
// To kill the AJAX request (Not Working)
console.log("The process is not running.");
poll_xhr.abort();
}
else
console.log(result);
},
dataType: "json",
complete: doPoll,
timeout: 5000
});
})
})();
PHP-код:
$pid = $_SESSION['PID'];
if(file_exists('/proc/'. $pid)){
// $pid is running
echo json_encode($pid);
}
else{
$e = 0;
echo json_encode($e);
}
Как я могу отменить процесс голосования? Мы ценим любые предложения.
призвание doPoll
на complete
значит это всегда будет называться, независимо от результата и состояния xhr.
Исходя из ваших требований, вам следует позвонить doPoll
от success
обработчик, когда результат говорит «задание все еще выполняется»
попробуйте использовать «clearTimeout ()» и не используйте «complete».
var poll_xhr;
(function doPoll() {
var time=setTimeout(function() {
poll_xhr = $.ajax({
type: 'GET',
url: 'break.php',
error: function (request, textStatus, errorThrown) {
//displayError();
console.log(request, textStatus, errorThrown);
},
success: function(result) {
if (result == 0) {
// To kill the AJAX request (Not Working)
console.log("The process is not running.");
//poll_xhr.abort();
clearTimeout(time);
}
else {
console.log(result);
doPoll
}
},
dataType: "json",
//complete: doPoll,
timeout: 5000
});
})
})();