0

こんにちはStackOverFlow国。MySQLデータベースから取得したjqGridに情報を追加しようとしています。2つのファイル=>index.htmlとdata.php(両方とも同じディレクトリにあります)

index.htmlソース=>

<script type="text/javascript">
$(function(){
    $("#jqGrid_tb").jqGrid({
        url: "data.php",
        datatype: "json",
        sortable: true,
        height: "auto",
        colNames: ["Name","Surname","Birth Year","Famous Film"],
        colModel: [
            {name: "name", index: "name", width: "150"},
            {name: "surname", index: "surname", width: "150"},
            {name: "b_year", index: "year", width: "150"},
            {name: "film", index: "film", width: "200"}
        ],
        rowNum: 5,
        rowList: [5,10,15],
        viewrecords: true,
        pager: $("#pager"),
        caption: "Famous Actors",
    }).navGrid("#pager");
});
</script>

<div id="grid">
    <table id="jqGrid_tb"></table>
    <div id="pager"></div>
</div>

data.php source =>

include ("JSON.php");

$json = new Services_JSON();

$con = new mysqli("host","user","pswd","db");

if (!$con->connect_errno){
    if ($r = $con->query("SELECT * FROM actors")){
        while ($row = $r->fetch_assoc()){
            $info[] = array(
                "name" => $row[name],
                "surname" => $row[surname],
                "b_year" => $row[b_year],
                "film" => $row[film],
            );
        }
        $r->free();
    }
}

echo $json->encode($info);

if (isset($con)){
    $con->close();
}

jqGridは、index.htmlファイルに情報なしで表示されます。また、data.phpファイルを開くと、情報がJSON形式に正常にエンコードされますが、何が問題なのか理解できません。助けてください、ありがとう...

4

2 に答える 2

1

含める必要があります

jsonReader: {
    repeatitems: false,
    root: function (obj) { return obj; },
    page: function (obj) { return 1; },
    total: function (obj) { return 1; },
    records: function (obj) { return obj.length; }
}

jqGridの追加オプションとして、入力データの形式を変更したくない場合があります。さらに、行の属性としてjqGridを割り当てる値を指定する必要がありますidid返されたすべてのアイテムの追加プロパティとして追加プロパティを含めることも、一意の値を含むkey: true列(内)にプロパティを追加することもできます。colModelたとえば、からの値"name"がすでに一意であることを保証できる場合は、列key: trueの定義にプロパティを含めることができ"name"ます。

さらにloadonce: true、jqGridのオプションの使用を検討できます。グリッドの完全なデータが一度にロードされ、データの並べ替え、ページング、検索(フィルタリング)がクライアント側のjqGridによって実装される場合、サーバー側で追加のコードを実装する必要はありません。グリッド内の行数が多い場合(数百または数千行)は、このオプションを使用しないでください。

于 2012-10-22T11:57:18.357 に答える
1

応答形式が間違っています。[データの読み込み]を展開して[ JSONデータ]を選択すると、 PHP/MySQLのサンプルが表示されるjqGridデモページに移動できます。

データの適切な形式は次のようになります。

{
    "total": "1",
    "page": "1",
    "records": "2",
    "rows": [
        { "name": "Robert", "surname": "De Niro", "b_year": "1943", "film": "Once Upon A Time In America" },
        { "name": "Al", "surname": "Pacino", "b_year":"1971", "film": "Scent Of A Woman"}
    ]
}

どこ:

  • total->総ページ数
  • page->現在のページ番号
  • records->レコードの総数
  • rows->データの行

repeatitemsまた、行をオブジェクトにする場合は、jqGridjsonReaderオプションで無効にする必要があります。

$("#jqGrid_tb").jqGrid({
    ...
    jsonReader: { repeatitems: false }
});

id後で参照できるように、行を一意にすることもお勧めします。

于 2012-10-22T11:32:43.773 に答える