Newn
@Newn

Как правильно завершить ajax и вызвать другую фукнцию?

Добрый день. Есть у меня форма которая отправляется ajax`м скрипту php. Если скрипт выдает ошибку в течении определенного времени то интервал и вызов ajax прекращается. Мне нужно сделать, так, что после завершения интервала вызывался другой скрипт php. В котором записывалось в базу, что такого файла нет. И возвращал сообщение для пользователя.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">
<script type="text/javascript" src="jquery.js"></script>
</head>

<body>
	
	<form id="myForm">
		<input id="username" type="hidden" value='wer43t' size="20"><br/><br/>
		<input type="submit" id="btn" value="Отправить">
	</form>
	
	<div id="content"></div>
	
	<script>
var interval;
function show(url) {
  $.ajax({
    type: "POST",
    url: url,
    data: "username=" + $("#username").val(),
	dataType:"json",
    success: function(data) {
      //$("#content").html(html);
	 
	 if (data.result == "error")
	 {
		//alert ("Ошибка");
		console.log(data);
		
			setTimeout(function() {
			clearInterval(interval);
			}, 1000*30/2);
	 }else
		{
			console.log(data);
		}
		
    }
  });
  return false;
}
let $btn = $('.btn');
interval = setInterval(function() {
  $('.btn').click(show("greetings.php"));
}, 3000);


	</script>
	
</body>
</html>


greetings.php
<?php 
$file = '1234_.txt';
if (!file_exists($file)){
	$err = "error";
	die(json_encode(array('result' => $err)));	
}else
{
	$err = "succes";
	die(json_encode(array('result' => $err)));
}
		
 ?>
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
JimmDiGreez
@JimmDiGreez
Full-stack Developer
Не могу уловить, зачем тут вообще интервал. Но не суть. Ответ помоему просто в том, чтобы после clearInterval взять и сделать еще один запрос, хоть тем же самым $.ajax.

Пример:
var interval;

function show(url) {
  $.ajax({
    type: "POST",
    url: url,
    data: "username=" + $("#username").val(),
    dataType:"json",
    success: function(data) {
       if (data.result == "error") {
        console.log(data);

        setTimeout(function() {
          clearInterval(interval);
          // another request
          $.ajax({
            type: "POST",
            url: "someurl",
            dataType:"json",
            success: function(data) {
              // some actions
            }
          });
        }, 1000*30/2);
       } else {
          console.log(data);
       }
    }
  });

  return false;
}


Лучше будет, если это как-нибудь разделить и и украсить, чем в колбечную лапшу дальше залезать.
Из-за интервала могут быть проблемы - таймаут нужно как задавать единожды, так и очищать в случае успеха. В общем тут много "но".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы