2016-07-15 11 views
0

PHPExcelを使用してxlsxスプレッドシートから取得した行を使用してjavascript配列を作成したいと考えています。ここでwhileループを使用してPhpExcelを使用して行を取得する

(私たちは、スプレッドシートにどのように多くの行を知らないと仮定イム)私は、whileループのパラメータにチェックするためにどのようなことを確認していない私のコード

$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(); 

} 

ある

されていますそれは私の唯一の問題かこれは間違った方法でそれについて行く?

また、関数getRowは行全体を返し、getValはページ上の他の場所で重要な1つの列を返します。

+0

あなたの関数は何も返しません。関数が返すものをチェックする必要があります。 – TehSphinX

+0

phpファイルの変数を 'document.read'セクションに戻して、応答テキストから文字列を返す方法はありますか? –

+0

なぜそれをしたいのか分かりません。私は関数getRowとgetValについて尋ねていました。戻り値はありません。あなたのjavascriptは、それ以上取得するデータがないことをどのように認識していますか? PHPはおそらく ''data.inc.php?x =' + i'で特別なものを送信するか、何も返さずにjavascriptが完了したことを知っているはずです。 – TehSphinX

答えて

0

あなたが使用できるさまざまなアプローチがあります。

1)あなたの要求を同期:

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. 
      } 
     } 
    } 
    ... 
} 

この機能はgetRows(0, rows)(なしループと呼ばれています)!。

これは、すべてのリクエストが前のリクエストが終了するとすぐに開始されるため、最も遅いアプローチです。

は、あなたが最初に各要求に行数を送ることができ、そのジャバスクリプトがありますどのように多くの行を知っている:

2)最初の行の数を送信します。次に、行をループして、今のように非同期呼び出しを作成できます。

3)は、一度にすべての行を送信します。

私はあなたのユースケースを知らないが、それは別に、すべての行を呼び出すために時間の無駄のように見えます。 1つの呼び出しを行い、すべてのデータを区切り記号(またはデータに合ったもの)として改行して、一度にすべて返すのはなぜでしょうか。あなたのデータは本当に巨大である場合、あなたはまだ大規模なチャンクにデータを打破し、オプション1またはオプション2

4と組み合わせる)、ページの読み込み時にデータを送ることができます:これはオプションで、それがある場合

わかりませんdocument.readyであなたの関数を実行しているようです。あなたは特別な隠されたdivにあなたのデータを書き込むことを検討し、そこから(JavaScriptで)あなたの変数にデータを読むことができます。そうすれば、すべてのajax呼び出しを避けることができます。とにかくすべてのデータをロードしたい場合は、これがおそらく最も高速です。

注:jQueryを使用すると、ajaxでの作業が大幅に簡単になります。例えばjQuery getをチェックしてください。

+0

ありがとうございました!うまく実行して今すぐ –

+0

:あなたはどのアプローチをとったのですか? – TehSphinX

+0

私は再帰的アプローチを使用してページのロード時に配列を生成し、その点から配列を参照するだけです。 –

関連する問題