2017-01-22 1 views
1

У меня есть следующий код, но он не работает должным образом. Я не могу понять, почему.setTimeout не дает ожидаемого результата

JS

var updateBoard = function() { 
     $.ajax({ 
      type: "POST", 
      url: "engine/main.php", 
      data: {codes: 2}, 
      success: function(response) { 
       console.log(response); 
      } 
     }); 
     setTimeout(updateBoard, 1000); 
    }; 

PHP

if(isset($_POST['codes'])) { 
    echo "test"; 
} 
+1

Так называют SetTimeout (updateBoard, 1000), 'на более высоком уровне. Внешняя функция – Smiranin

+0

в чем проблема. что вы ожидаете от кода выше? – vijayP

+0

@vijayP, я ожидаю получить слово 'test' в моей консоли каждую секунду. но мой код не дает никакого вывода. – Ayan

ответ

1

Вы можете попробовать следующий подход:

var updateBoard = function() { 
     $.ajax({ 
      type: "POST", 
      url: "engine/main.php", 
      data: {codes: 2}, 
      success: function(response) { 
       console.log(response); 
       setTimeout(updateBoard, 1000); //calling the function after 1 sec after we get the response 
      } 
     }); 

    }; 

updateBoard(); //calling it right away 
0

Как сказал @Smiranin, просто позвоните SetTimeout вне функции:

var updateBoard = function(){ 
    $.ajax({ 
     type: "POST", 
     url: "engine/main.php", 
     data: {codes: 2}, 
     success: function(response) { 
      console.log(response) 
     } 
    }) 
}; 
setTimeout(updateBoard, 1000); 

Или просто использовать setInterval вместо SetTimeout

setInterval(updateBoard, 1000); 
+0

Он запускает мой код один раз, что приводит к печати 'test' один раз только в консоли. – Ayan

+0

@Ayan, как я только что использовал setInterval вместо проверки setTimeout: https://jsfiddle.net/onq49tgr/ – Vixed

+0

@setInterval также работал, но мне не нравятся проблемы перекрытия запросов. – Ayan

0

Вы можете попробовать setInterval(), если вы хотите запустить это через каждые секунд.

var updateBoard = function() { 
 
     $.ajax({ 
 
      type: "POST", 
 
      url: "engine/main.php", 
 
      data: {codes: 2}, 
 
      success: function(response) { 
 
       console.log(response); 
 
      } 
 
     }); 
 
     
 
    }; 
 
\t setInterval(updateBoard, 1000); 
 
\t
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+1

Интервал для запросов на бэкэнд - это не очень хорошая идея. Представьте, что у вас есть один запрос, который занимает больше 1 секунды (например, кто-то использует соединение с высокой задержкой на мобильном устройстве). У вас будет куча перекрывающихся запросов. – newBee