J'ai créé un exemple très simple. J'essaie de demander une valeur à mon serveur toutes les X secondes, dans ce cas, je veux simplement obtenir un nombre aléatoire, chaque seconde. Cette solution fonctionne, mais malheureusement il semble qu'une boucle infinie se produise après un certain temps, ce qui conduit à un crash. J'obtiens également plus de 100 000 erreurs après un certain temps net::ERR_INSUFFICIENT_RESOURCES.

request_data(1000);

function request_data(intervall) {            
    $.post('ajax.php', {
        cmd: "get_random_number"
    }, function (returned_data, status) {
        if (status === "success") {
            $("#result_output").html(returned_data);
            setInterval(function() {
                request_data(intervall);
            }, intervall);
        }
    });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="result_output></p>
// ajax.php
<?php
    $cmd  = filter_input(INPUT_POST, "cmd");
    if (isset($cmd) && $cmd == "get_random_number") {
        echo rand(5, 15);
    }

Quelle est la meilleure solution pour y parvenir?

1
Black 8 mars 2016 à 14:06

3 réponses

Meilleure réponse

Je l'ai résolu en remplaçant simplement setInterval par setTimeout.

0
Black 8 mars 2016 à 12:14

Comme Derek l'a souligné, c'est parce que vous effectuez 2 ^ n appels puisque setInterval est à l'intérieur de la fonction elle-même.

Essayez-le comme ça à la place

window.setInterval(1000, request_data);

function request_data() {            
    $.post('ajax.php', {
        cmd: "get_random_number"
    }, function (returned_data, status) {
        if (status === "success") {
            $("#result_output").html(returned_data);
        }
    });
}
1
siva 8 mars 2016 à 11:16

Vous pouvez faire un setInterval, puis à l'intérieur, faire un appel ajax. L'un des paramètres que vous pouvez définir dans le $ .ajax est un délai d'expiration - afin que vous puissiez arrêter plusieurs appels ajax s'empilant et causant des problèmes.

$.ajax({
    url: '',
    type: '',
    data: {},
    timeout: 3000,
    success: function(data){
        // do stuff
    }
});

Pour plus d'informations sur les paramètres, voir http://api.jquery.com/jQuery.ajax/

1
Luke P 8 mars 2016 à 11:14