У меня есть файл verify.php, который проверит запись в базе данных и вернет 1, если он существует, или 0, если его нет. Но эта база данных будет обновляться от 0 до 5 секунд. Таким образом, по крайней мере в течение первых 5 секунд возвращаемое значение может быть 0.
На другой странице я хочу проверить возвращение verify.php с помощью AJAX и повторить попытку 5 раз с интервалом в 1 секунду между каждой проверкой. Если в какой-либо момент этой 5-секундной проверки он получил 1, выйдите из цикла проверки и отобразите сообщение об успешном завершении.
Я написал это, но он проверяет только один раз, и я не знаю, как сделать это проверить х раз:
<p id="status"></p>
<script type="text/javascript">
var url = 'verify.php';
$('#status').text('Please wait...');
$(document).ready(function(){
$.ajax({
type: 'POST',
url:url,
success: function(msg){
if (msg == 1){
$('#status').text('success');
}else{
$('#status').text('failed');
}
}
});
});
</script>
Буду признателен за любую оказанную помощь. Благодарю.
Код
var tries = 0;
function getStatus() {
$.ajax({
type: 'POST',
url: url,
success: function(msg){
tries++;
if (msg == 1){
$('#status').text('success');
} else {
if (tries >= 5 ) {
$('#status').text('failed');
} else {
setTimeout(getStatus, 1000);
}
}
}
});
}
без написания кода для вас, вот подход «грубой силы» …
оберните ваш Ajax-вызов в функцию
объявить переменную «можно остановить» и временную переменную вне этой функции
каждый раз, когда вызывается функция, увеличивайте временную переменную
установите переменную «can stop» в вашем коде ответа ajax
создать функцию, которая выглядит рекурсивно;
он проверяет переменную «can stop» и выдает залог, как только он установлен
он вызывает вашу функцию AJAX
он проверяет переменную с временным вызовом и выдает залог, если счетчик пройден
он вызывает setTimeout для вызова самого себя;
использовать window.setTimeout (или оболочку ajax для него), чтобы подождать секунду
Использовать window.setInterval(function , timeInMillis)
функция времени ваших запросов AJAX. Используйте логическое значение, чтобы проверить, когда конкретный запрос вернулся.
Только когда он вернется, таймер может сделать новый запрос.
Желаю тебе всего наилучшего.
<script type="text/javascript">
var queryOn = false;
var interval;
$(function (){
var attempts = 0;
interval = window.setInterval(
function () {
if (queryOn === false) {
queryOn = true;var url = "...url";
$.ajax({
type: 'POST',
url: url,
success: function (msg) {
queryOn = false;
if (msg === 1) {
$('#status').text('success');
window.clearInterval(interval);
} else {
$('#status').text('failed');
}if(attempts === 5){
window.clearInterval(interval);
}
++attempts;
}
});
}
}, 5000);
});
</script>