4

Datatablesでajaxソースを使用しようとしていますが、使用中にエラーが発生しました。以前は、AjaxはDatatablesで使用されておらず、正常に機能していましたが、AjaxとJSONを使用しようとすると、いくつかのエラーが発生します。

私が受け取っているエラーは次のとおりです。

Uncaught TypeError:未定義のプロパティ'length'を読み取ることができません

編集:このテキストのすぐ下にある改訂されたコードを使用すると、このエラーは発生しなくなりますが、DataTablesはまだ壊れています(検索、ページ付け、並べ替えなどはありません)。実例があると役立つ場合があるので、次のサイトを試してください:fogest.com/test

ページが読み込まれたときにテーブルを作成するには、次のコードを使用します。

$(document).ready(function() {
    $('#trades').dataTable( {
        "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
        "sPaginationType": "bootstrap",
        "bProcessing": true,
        "bServerSide": true,
        "aoColumns": [
            { "mData": "id" },
            { "mData": "Minecraft_Username" },
            { "mData": "Block_Name" },
            { "mData": "Quantity" },
            { "mData": "Cost" },
            { "mData": "Trade_Status" },
          ],
        "sAjaxSource": "test.php"
    } );
} );

また、sAjaxSourcetest.phpには次のものが含まれています。

<?php 
$tableName = "mctrade_trades";
$result = mysql_query("SELECT `id`, `Minecraft_Username`, `Block_Name`, `Quantity`, `Cost`, `Trade_Status` FROM $tableName");

$data = array();
while ( $row = mysql_fetch_assoc($result) )
{
    $data[] = $row;
}
header("Content-type: application/json");
echo json_encode( $data );    

?>

test.phpの出力:

[{"id":"1","Minecraft_Username":"fog","Block_Name":"DIAMOND_PICKAXE","Quantity":"1","Cost":"100","Trade_Status":"1"},{"id":"2","Minecraft_Username":"fog","Block_Name":"DIAMOND_PICKAXE","Quantity":"1","Cost":"1002","Trade_Status":"1"},{"id":"3","Minecraft_Username":"fog","Block_Name":"DIAMOND_PICKAXE","Quantity":"1","Cost":"1035","Trade_Status":"1"},{"id":"4","Minecraft_Username":"fog","Block_Name":"DIAMOND_PICKAXE","Quantity":"1","Cost":"1035","Trade_Status":"1"},{"id":"5","Minecraft_Username":"fog","Block_Name":"DIAMOND_PICKAXE","Quantity":"1","Cost":"100","Trade_Status":"2"},{"id":"6","Minecraft_Username":"fog","Block_Name":"DIAMOND_PICKAXE","Quantity":"1","Cost":"100","Trade_Status":"2"},{"id":"7","Minecraft_Username":"fog","Block_Name":"DIAMOND_PICKAXE","Quantity":"1","Cost":"10000","Trade_Status":"2"}]

テーブルは正しく生成されますが、このエラーのため、「テーブルの真上で処理中です。検索など、データテーブルの機能を使用できません。

上記のJSONを使用したテーブルの画像は次のとおりです。 テーブル出力の例

JSON出力にエラーがあると思いますが、何が問題なのか、またそれを修正するために何をすべきかが正確にはわかりません。私はWeb開発にかなり慣れていないので、Datatablesの実装はかなりの学習曲線になっています。

4

1 に答える 1

6

次の理由により、JSON出力が間違っています。

  1. およびフィールドがありませんiTotalRecordsiTotalDisplayRecordsこれが、ページネーション(および他のすべての機能)が壊れている理由です(フッターセクションの「 NaNエントリの1からNaNを表示しています( NaN合計エントリからフィルタリングされています)」というメッセージに注意してください)。サーバー側の処理の詳細については、このページを参照してください。
  2. JSON応答の後にいくつかのHTMLコードがあります。

追加のHTMLコード(test.phpから取得)は次のとおりです。

<!-- Hosting24 Analytics Code -->
<script src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->

私の意見では、test.phpスクリプトは次のようになります。

<?php 

$link = mysqli_init();

// Adjust hostname, username, password and database name before use!
$db = mysqli_real_connect($link, "hostname", "username", "password", "database") or die(mysqli_connect_error());

$SQL = 'SELECT `id`,`Minecraft_Username`,`Block_Name`,`Quantity`,`Cost`,`Trade_Status` FROM mctrade_trades';
$result = mysqli_query($link, $SQL) or die(mysqli_error($link));

$aaData = array();
while ($row = mysqli_fetch_assoc($result)) {
    $aaData[] = $row;
}

$response = array(
  'aaData' => $aaData,
  'iTotalRecords' => count($aaData),
  'iTotalDisplayRecords' => count($aaData)
);
if (isset($_REQUEST['sEcho'])) {
  $response['sEcho'] = $_REQUEST['sEcho'];
}

header('Content-type: application/json'); 
echo json_encode($response);

?>

mysql_*これらの関数は非推奨であるため、代わりにPDOまたはMySQLiを使用する必要があることにも注意してください。詳細については、この回答をご覧ください。

于 2013-01-03T21:23:54.237 に答える