2016-03-29 6 views
0

別のファイルにJavaScriptにクラスで定義されなさい私が序文し、多くのWeb開発を行っていません。私はmethodExec.phpファイルとmain.jsファイルを持っています。私のPHPファイルでは、データベースから行を含むリストを作成しています。そのリストを.jsファイルで使用しようとしています。クラス外の配列を宣言するとアクセスできますが、データベースの行を収集した後で配列を参照する方法がわかりません。PHPオブジェクトは、

methodExec.php

<?php 

require_once 'includes/constants.php'; 

$methodExecVar = new methodExec(); 

class methodExec { 
    private $conn; 
    public $timesList; 

    function __construct(){ 
     $this->conn = new mysqli(DB_SERVER,DB_USER,DB_PASSWORD, DB_TIMES) or 
       die('There was a problem with the database connection.'); 
    } 

    function getTimes(){ 

     $timesList = []; 
     $query = "SELECT * 
        FROM times"; 

     $result = $this->conn->query($query); 

     while ($row = $result->fetch_assoc()) { 
      $timesList[] = $row; 
     } 

     $this->conn->close(); 

     return $timesList; 
    } 
} 
?> 

<script type="text/javascript">var jsArray = <?php echo json_encode($methodExecVar->timesList); ?>;</script> 
<script type="text/javascript" src="js/main.js"></script> 

main.jsのみalert(jsArray)を含みます。この例では、nullが返されますが、これは私が理解できるものですが、どのように待機させるか、または何らかの選択肢を作る方法がわかりません。前もって感謝します!

+0

は、スクリプトタグで正しく出力されている文字列ですか? –

+0

あなたは、結果を待つためにjs関数setTimeout()を試すことができます。 300ミリ秒に設定してみてください。 – daremachine

+0

jsArray inicializationの前にブラウザがmain.jsをメモリにロードするため、おそらくnullです。時間の呼び出しに存在しないため、警告のjsArrayが空である可能性があります。 – daremachine

答えて

1

ブラウザ負荷main.jsがjsArrayが初期化された後、前にメモリにコピーしますので、それはおそらくnullです。時間の呼び出しに存在しないため、jsArrayが空になることがあります。

あなたはjavascript関数setTimeout()をラップすることができますjsArray変数で呼び出したいものを機能。 200-300msに設定してみてください。これは大丈夫です。 それはすべてが初期化された後、あなたの関数を呼び出すでしょう。

これは、jQueryライブラリでjQuery.ready()関数と同様の原理です。それはの

言う「jQueryの状態で準備ができている場合にのみ、コードを実行します。」