Asynchron aktualisieren eines Bootstrap-Statusanzeige mit jQuery $.ajax

Ich habe ein Skript durchläuft, IPs auf meinem lokalen Netzwerk prüfen, ob alles da ist. Jede iteration, ich behaupte, dass ein AJAX-request get die HTTP-status-code mit cURL, die ist wieder in meinem Javascript. Ich habe bereits integrierten Funktionen zu berechnen, in dem der progress-bar sein sollte, aber es nur den Fortschrittsbalken aktualisiert, wenn das gesamte Skript ist beendet.

Hier ist, was ich habe, so weit (ich bin nur mit 0-23 in diesem Beispiel, weil ich bin auf 199.235.130.22 und ich zurück, '200')

function updateProgress(percentage){
    document.getElementById('progressBar').style.width = percentage+'%';
    $('#progressText').html(percentage+'%');
}
for(host = 0; host <= 23; host++){
    ipToCheck = network_addr+'130.'+host;
    updateProgress(100/host);
    $.ajax({
        type: 'GET',
        url: 'js/scanhelper.php',
        data: {
            ip: ipToCheck
    }
    }).done(function(msg) {
        updateProgress(100/host);
        if(msg!=0){
            logSuccess(ipToCheck);
        }
    });
    pausecomp(200);  //Just a sleep function to simulate actual processing
}

Meine Bootstrap HTML ist einfach

<div class="progress progress-striped active" style="height:44px;">
    <div id="progressBar" class="bar" style="width:1%;"></div>
</div>

Und, wenn es darauf ankommt, meine cURL PHP-Skript ist hier: http://pastebin.com/JRZckdVb

Was dieser tun sollten, ist, bei jeder iteration, aktualisieren Sie die Fortschritt-bar Breite bis 100 (als 100%) geteilt durch den aktuellen iteration. Es kann nicht sein, die korrekte Mathe, aber der Punkt ist, es ist nur aktualisieren, nachdem alle Iterationen abgeschlossen sind, einfrieren der Seite, während es läuft.

Wie kann ich dieses Problem beheben?

Weil die for-Schleife blockiert. Und was sleep-Funktion, die Sie tun, ist wahrscheinlich auch zu blockieren.
Die Blockierung? Wie bekomme ich es un-block?
Tun nicht verwenden Sie eine for - /while-Schleife.
Leider klingen unwissend (ich bin), aber ich brauche eine Art Schleife ausführen, um das Skript für die Werte 0-23 (in diesem Fall). Läuft prozedural wäre eine MENGE von wiederholten code, es sei denn, es gibt einen anderen Weg, es zu tun

InformationsquelleAutor Scott | 2012-12-20

Schreibe einen Kommentar