2 Stimmen

jQuery .load innerhalb von .each

Versucht, danach zu suchen, obwohl ich nicht einmal sicher bin, wonach ich suche. Mein Problem ist folgendes:

$.getJSON('process.countfiles.php?action=getfiles', function(data) {
    $.each(data, function(name, value){
        $("#displayfile").load("process.files.php?file="+value, function(){
        });
    });
});

OK, ich habe ein Skript (process.countfiles.php) mit 2 Funktionen, 1 - die Dateien zählen und eine Dateiliste in einer .dat-Datei erstellen. Dann Nummer 2 ist die .dat-Datei öffnen und verarbeiten die Dateien einzeln.

Der erste Teil funktioniert prima, also gehen wir zum zweiten Teil über... Ich habe die Daten, die von PHP wie folgt übergeben werden:

PHP-Code:

$fh = fopen($dirdatafn, "r"); 
    while (!feof($fh)){ 
        $data_file_line[] .= fgets($fh); 
    } 
    @fclose ($fh); 
    echo json_encode($data_file_line); 

Jetzt zurück zu den JS (jQuery ist der Rahmen, den ich für dieses verwende) Daten ist das Array von $data_file_line aus dem PHP, es erhält die Daten ohne Problem, dann sollte es beginnen, sie mit dem .each zu trennen

Das Problem ist, dass er versucht, alle 7.000+ gleichzeitig zu laden und sie alle an die process.files.php zu senden, obwohl ich möchte, dass er nur eine Datei auf einmal verarbeitet.

Für jede Hilfe wären wir dankbar.

Ich danke Ihnen, Jeff

1voto

John W Punkte 1452

Sie können jQuery anweisen, Ihre Aufrufe an "process.files.php?file=" synchron, wenn Sie die allgemeinere Methode $.ajax() anstelle von $("selector").load() verwenden;

ersetzen.

$("#displayfile").load("process.files.php?file="+value, function(){
        });

mit

$.ajax("process.files.php?file="+value, {
        async: false, // this is true by default
        success: function(data) {
            $("#displayfile").html(data); // this is what you were doing by calling $.load
            // do other stuff
        }
     });

1voto

Michal Punkte 13125

Vorausgesetzt, Sie JSON gibt ein Array können Sie dies tun (ich habe es nicht getestet). Grundsätzlich jede Datei einzeln zu verarbeiten, müssen Sie warten, bis der Erfolg Callback Feuern, bevor Ihre nächste Datei verarbeitet wird:

    var data_arr;
    $(function() {
        $.getJSON('process.countfiles.php?action=getfiles', function(data) {
            data_arr = data;
            requestFiles(data_arr[0])
        });
        function requestFiles(i) {

            $("#displayfile").load("process.files.php?file=" + data_arr[i], function() {
                if(i < data_arr.length) {
                    requestFiles(i + 1);
                }
            });
        }

    })

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X