Отмена запроса AJAX в функции длинного опроса

Я внедряю приложение, которое может отслеживать фоновые задания (Программа 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);
}

Как я могу отменить процесс голосования? Мы ценим любые предложения.

1

Решение

призвание doPoll на complete значит это всегда будет называться, независимо от результата и состояния xhr.

Исходя из ваших требований, вам следует позвонить doPoll от successобработчик, когда результат говорит «задание все еще выполняется»

1

Другие решения

попробуйте использовать «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
});
})
})();
0