2016-07-15 5 views
0

zu erhalten Ich suche Java-Arrays mit Zeilen aus einem XLSX-Tabellenblatt mit PHPExcel zu erstellen.Verwenden einer While-Schleife, um Zeilen mit PhpExcel

Hier ist mein Code

$document.ready({ 
    var rows = new Array(); 
    var vals = new Array(); 

    var i = 0; 
while(){ 
    rows[i] = getRow(i); 
    vals[i] = getVal(i); 
    i++; 
} 
}); 

function getRow(i){ 
    if(window.XMLHttpRequest){ 
     xmlhttp= new XMLHttpRequest(); 
    }else{ 
     xmlhttp= new ActiveXObject('Microsoft.XMLHTTP'); 
    } 


    xmlhttp.onreadystatechange = function(){ 
     if(xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
      return xmlhttp.responseText; 
     } 

    } 


    xmlhttp.open('GET', 'data.inc.php?x='+i, true); 
    xmlhttp.send(); 

} 

function getVal(i){ 
    if(window.XMLHttpRequest){ 
     xmlhttp= new XMLHttpRequest(); 
    }else{ 
     xmlhttp= new ActiveXObject('Microsoft.XMLHTTP'); 
    } 


    xmlhttp.onreadystatechange = function(){ 
     if(xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
      return xmlhttp.responseText; 
     } 

    } 


    xmlhttp.open('GET', 'include.inc.php?x='+i, true); 
    xmlhttp.send(); 

} 

Ich bin nicht sicher, was in dem Parameter der while-Schleife zu überprüfen (Im vorausgesetzt wir nicht wissen, wie viele Zeilen in der Tabelle sind)

Ist dass mein einziges Problem oder dies der falsche Weg ist?

Auch die Funktion getRow gibt die gesamte Zeile zurück und getVal gibt eine Spalte zurück, die an anderer Stelle auf der Seite wichtig ist.

+0

Ihre Funktionen geben nichts zurück. Wahrscheinlich müssen Sie nach etwas suchen, das die Funktionen zurückgeben. – TehSphinX

+0

Gibt es eine Möglichkeit, eine Variable aus der PHP-Datei zurück in den Abschnitt 'document.read' zu bekommen, während die Zeichenfolge immer noch aus dem Antworttext zurückgegeben wird? –

+0

Nicht sicher, warum Sie das tun möchten. Ich habe nach den Funktionen getRow und getVal gefragt. Es gibt keinen Rückgabewert. Wie erkennt Ihr JavaScript, dass es keine Daten mehr zu bekommen gibt? PHP sollte wahrscheinlich etwas Besonderes über ''data.inc.php? X =' + i 'schicken oder einfach nichts zurückgeben, damit JavaScript weiß, dass es gemacht wird. – TehSphinX

Antwort

0

Es gibt verschiedene Ansätze, die Sie verwenden können:

1) Synchronisieren Sie Ihre Anfragen:

function getRow(i, rows){ 
    ... 

    xmlhttp.onreadystatechange = function(){ 
     if(xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
      if xmlhttp.responseText != '' { 
       rows[i] = xmlhttp.responseText; 
       getRow(i+1, rows) 
      } else { 
       // call function that works with rows. 
      } 
     } 
    } 
    ... 
} 

Diese Funktion ist nur mit getRows(0, rows) (keine Schleife genannt!).

Dies ist definitiv der langsamste Ansatz, da jede Anfrage gestartet wird, sobald die vorherige Anfrage beendet ist. Senden

2) Anzahl der Zeilen zuerst:

Sie können die Anzahl der Zeilen mit dem ersten oder mit jeder Anforderung senden, so weiß Javascript, wie viele Zeilen gibt. Dann können Sie wie bisher die Zeilen durchlaufen und asynchrone Aufrufe erstellen. Senden

3) alle Zeilen auf einmal:

Ich weiß nicht, Ihren Anwendungsfall, aber es sieht aus wie eine Verschwendung von Zeit getrennt jede Zeile zu rufen. Machen Sie einen Anruf und geben Sie alle Daten auf einmal mit Zeilenumbrüchen als Trennzeichen (oder etwas, das zu Ihren Daten passt) zurück. Wenn Ihre Daten wirklich riesig ist, könnte man noch die Daten in große Stücke brechen und kombiniert diese mit Option 1 oder Option 2

4) Daten sendet an Seite zu laden:

Nicht sicher, ob dies eine Option ist es sieht so aus, als ob Sie Ihre Funktion auf document.ready ausführen. Sie könnten Ihre Daten in ein spezielles verstecktes div schreiben und die Daten von dort (mit Javascript) in Ihre Variablen einlesen. Auf diese Weise vermeiden Sie alle Ajax-Anrufe. Dies ist wahrscheinlich am schnellsten, wenn Sie alle Daten trotzdem laden möchten.

Hinweis: Sie könnten jQuery verwenden, was die Arbeit mit Ajax viel einfacher macht. Überprüfen Sie zum Beispiel jQuery get.

+0

Danke! läuft jetzt gut –

+0

nur aus Neugier: Welchen Ansatz haben Sie genommen? – TehSphinX

+0

Ich verwendete den rekursiven Ansatz, um ein Array beim Laden der Seite zu füllen, und referenzierte das Array nur von diesem Punkt an. –