1

私は Datatables.js を使用しており、PHP ファイルから JSON をテーブルに入力しています。私の現在の設定はこれです:

PHPファイルがJSONを生成 > JSファイルが前のPHPファイルへのリンクでテーブルを初期化 > PHPファイルがグラフを表示 (HTML付き。PHPなのでヘッダー/フッターを追加できます)。

これに関する問題は、30 個のグラフがあることです。JSON 用の 30 個の PHP ファイル + 初期化用の 30 個の JS ファイル、およびグラフ表示用の 30 個の追加の PHP ファイル。さて、これはすでに途方もない量のファイルです (私の意見では) が、さらにテーブルを追加する必要があります。

今あるテーブルのそれぞれに、同じ行の別の列の値を URL に渡すリンクを含む新しい列を作成します。たとえば、Datatable の列の 1 つで、値は 1983 です。他の列のリンクは になります/query.php?value=1983

これでやりたかったことは、この変数を JSON を生成する PHP ファイルに渡し、変数を使用してクエリを変更できるようにすることです。これはPHPコードになります

<?php
 $myServer = "server";
 $myDB = "database";

 $conn = sqlsrv_connect ($myServer, array('Database'=>$myDB));

 $value = $_GET['value'];

 $sql ="SELECT year, value
        FROM database.dbo.table
        WHERE year = $value";

 $data = sqlsrv_query ($conn, $sql);

 $result = array();   

 do {
     while ($row = sqlsrv_fetch_array ($data, SQLSRV_FETCH_ASSOC)) {
         $result[] = $row;   
     }
 } while (sqlsrv_next_result($data));

 $json = json_encode ($result);

 sqlsrv_free_stmt ($data);
 sqlsrv_close ($conn); 
?>

これにより、JSON が正しく生成されます。ただし、ユーザーがテーブル内のリンクをクリックすると、新しいテーブルが含まれる新しいページに移動したいと考えています。ただし、私のやり方では、リンクは生成された JSON に移動します。したがって、私の解決策は、JSON を生成する PHP とテーブルを表示する PHP ファイルをマージすることです。

<?php //Insert the code I posted above ?>

<!DOCTYPE html>

<html>
    <head>
        <!-- Included files, title, etc... -->
    </head>

    <body>
        <?php include '../common/header.inc' ?>

        <div class="container">
            <table id="chart" style="clear: both">
                <thead>
            </thead>

                <tbody>
                    <tr>
                        <td colspan="3" class="dataTables_empty">There doesn't seem to be anything here!</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <?php include '../common/footer.inc'?>

        <script src="/js/main.js"></script>
        <script src="table.js"></script> <!-- This is the Datatable initialization -->
    </body>
</html>

初期化は次のようになります

$(document).ready(function () {
    var header = [ // This puts the data in the right column
        { "sTitle": "Year", "mData": "label", "sClass": "center" },
        { "sTitle": "Length", "mData": "value", "sClass": "center" }
    ]

    var oTable = $('#chart').dataTable({
        "bProcessing": true,
        "sPaginationType": "full_numbers",
        "sAjaxSource": "query.php", // Loads the JSON script
        "sAjaxDataProp": "",
        "aoColumns": header,

        "sDom": 'T<"clear">Rlfrtip', 
        "oTableTools": { 
            "sSwfPath": "/media/swf/copy_csv_xls_pdf.swf",
            "sRowSelect": "multi",
            "aButtons": ["select_all", "select_none",
                {
                    "sExtends": "collection",
                    "sButtonText": "Export Selected Rows",
                    "aButtons": [
                        {"sExtends": "copy", "bSelectedOnly": true, "mColumns": [0, 1] },
                        { "sExtends": "csv", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
                        { "sExtends": "xls", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
                        { "sExtends": "pdf", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
                    ]
                },
                { "sExtends": "print", "sButtonText": "Print View" }
            ]
        }
    });
});

これに関する問題は、初期化が JSONその下の HTML コードを読み取っていることです。

基本的に私が求めているのは、JSONだけを変数に保存して、JSコードでJUST THE JSONにリンクできる方法はありますか? これは可能ですか?これを行うより良い方法はありますか?(私はそれについてあまり知らないので、クレイジーなPHPスクリプトは必要ありません)。


解決策:これはジョンの提案後の私のコードです。に変更sAjaxSourceする必要もありましたaaData。しかし、今はうまくいきます!

<?php
 $myServer = "server";
 $myDB = "database";

 $conn = sqlsrv_connect ($myServer, array('Database'=>$myDB));

 $value = $_GET['value'];

 $sql ="SELECT year, value
        FROM database.dbo.table
        WHERE year = $value";

 $data = sqlsrv_query ($conn, $sql);

 $result = array();   

 do {
     while ($row = sqlsrv_fetch_array ($data, SQLSRV_FETCH_ASSOC)) {
         $result[] = $row;   
     }
 } while (sqlsrv_next_result($data));

 $json = json_encode ($result);

 sqlsrv_free_stmt ($data);
 sqlsrv_close ($conn); 
?>

<!DOCTYPE html>

<html>
    <head>
        <!-- Included files, title, etc... -->
    </head>

    <body>
        <?php include '../common/header.inc' ?>

        <div class="container">
            <table id="chart" style="clear: both">
                <thead>
            </thead>

                <tbody>
                    <tr>
                        <td colspan="3" class="dataTables_empty">There doesn't seem to be anything here!</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <?php include '../common/footer.inc'?>

        <script src="/js/main.js"></script>
        <script type="text/javacript">
            $(document).ready(function () {
                var json = <?php echo $json ?>;
                var header = [ // This puts the data in the right column
                    { "sTitle": "Year", "mData": "label", "sClass": "center" },
                    { "sTitle": "Length", "mData": "value", "sClass": "center" }
                ]

                var oTable = $('#chart').dataTable({
                    "bProcessing": true,
                    "sPaginationType": "full_numbers",
                    "aaData": json, // Loads the JSON script
                    "sAjaxDataProp": "",
                    "aoColumns": header,

                    "sDom": 'T<"clear">Rlfrtip', 
                    "oTableTools": { 
                        "sSwfPath": "/media/swf/copy_csv_xls_pdf.swf",
                        "sRowSelect": "multi",
                        "aButtons": ["select_all", "select_none",
                            {
                                "sExtends": "collection",
                                "sButtonText": "Export Selected Rows",
                                "aButtons": [
                                    {"sExtends": "copy", "bSelectedOnly": true, "mColumns": [0, 1] },
                                    { "sExtends": "csv", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
                                    { "sExtends": "xls", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
                                    { "sExtends": "pdf", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
                                ]
                            },
                        { "sExtends": "print", "sButtonText": "Print View" }
                        ]
                    }
                });
            });
        </script> 
    </body>
</html>
4

1 に答える 1

1

スクリプトはjsonをエコーするだけです。それをjavascript変数に保存してから使用する必要があります。

<script type="text/javascript"> 
    var json = <?php contents go here?>;
</script>` 

または、PHP スクリプト自体から JavaScript をエコーすることもできます。

于 2013-07-15T12:38:07.447 に答える