Как всегда, извините мой "Тарзан" английский, пожалуйста: P
Проблема заключается в следующем: я должен вызвать webService с временными интервалами, чтобы убедиться, что список контактов загружен полностью.
Процедура такова:
1. -Click на кнопке для отправки CSV файла.
2. -A div с анимацией загрузки должен быть просмотрен WHILE UPLOADING CSV в базу данных.
3. -When websService завершает ввод данных, div с анимацией разгрузки должен исчезнуть.
Я создал функцию JS, которая "Я думаю" в порядке, как показано:
function loadWS(idArchive){
$('#loaderX').css('display', 'block'); //Here starts with the animation
var interrupt=setInterval(function(){ //Start asking the WS
$.ajax({
data:{
'idArchive': idArchive,
},
url:'/NewsLetters.checkFinal', //WebService call: the webservice checks
type:'post', //if register entry is complete.
success:function(res){
var r=eval(res);
if(r==1){ //IF Response ok? we've finished the task
clearInterval(interrupt);
load_sec(link,106); //This reloads the section via AJAX
$('#loaderX').css('display', 'none'); //Here stops the animation
}
if (r==0) {
}
}
});
},1000);
}
Я делаю что-то неправильно? Правильно ли вызывать WS в процессе setInterval?
Спасибо всем заблаговременно!
На основании проверки процесса вам не нужен setInterval, вам просто нужно снова вызвать функцию. Я бы просто сделал прямой аякс-звонок. Просто будьте осторожны, поскольку это может вызвать бесконечный цикл
function loadWS(idArchive) {
$('#loaderX').css('display', 'block'); //Here starts with the animation
checkStatus(idArchive);
}
function checkStatus(idArchive) {
$.ajax({
data: {
'idArchive': idArchive
},
url: '/NewsLetters.checkFinal', //WebService call: the webservice checks
type: 'post', //if register entry is complete.
error: function (xhr, status, error) {
// do something with the error
}
success: function (res) {
var r = parseInt(res);
if (r === 1) { //IF Response ok? we've finished the task
load_sec(link, 106); //This reloads the section via AJAX
$('#loaderX').css('display', 'none'); //Here stops the animation
} else if (r === 0) {
setTimeout(checkStatus(idArchive), 1000);
}
}
});
}
if (r == 0) { setTimeout(function() { checkStatus(idArchive); }, 1000); }
Кроме того, вы, вероятно, не хотите использовать eval
: stackoverflow.com/questions/86513/…
просто сделайте снизу и увеличьте время как минимум на 5 секунд.
setInterval(function(){
$.ajax({
data:{
'idArchive': idArchive,
},
url:'/NewsLetters.checkFinal', //WebService call: the webservice checks
type:'post', //if register entry is complete.
success:function(res){
var r=eval(res);
if(r==1){ //IF Response ok? we've finished the task
clearInterval(interrupt);
load_sec(link,106); //This reloads the section via AJAX
$('#loaderX').css('display', 'none'); //Here stops the animation
}
if (r==0) {
}
}
});
}, 5000);