Чтобы исправить это, вам нужно исправить аргумент обратного вызова, так как вы переопределяете его в каждой из функций-обработчиков statusCode
. Кроме того, вы можете упростить логи c, получив код состояния из объекта jqXHR, переданного в success
, вместо необходимости писать код для каждого возможного кода состояния. Это также сделает рекурсию более простой. Попробуйте это:
function doPoll(obj) {
function pollQuery(callback) {
jQuery.ajax({
headers: {
"access-token": "67e9489669217"
},
type: 'GET',
url: 'https://someurl/classifier/' + obj["id"],
crossDomain: true,
success: function(data, status, xhr) {
if (xhr.status !== 200) {
setTimeout(function() {
pollQuery(callback); // recurse after 10 second delay
}, 10000);
// if required you can handle the messages shown for 204 and 404 states here...
} else {
callback && callback(data); // 200 received, execute callback function
}
}
})
}
pollQuery(function(response) {
console.log("response :" + response);
});
}
Однако Я настоятельно рекомендую вам не следовать шаблону AJAX опроса, поскольку он не масштабируется и, в долгосрочной перспективе, вызывает больше проблем, чем решает. Я настоятельно рекомендую вам следовать шаблону наблюдателя вместо этого, используя Websockets. Доступно множество ресурсов, показывающих, как это сделать при поиске.