0

ウェブサイトの書き方についてアドバイスが必要です。

私のDBには、Webサイトのさまざまなフレームに動的にロードしたいデータがいくつかあります。質問は次のとおりです。生データをHTMLコードに変換するにはどうすればよいですか?

現在、次のオプションが表示されています。

  • PHP関数でHTMLに変換し、Ajaxを介してページにロードします
  • Ajaxを介して生データを取得し、JavascriptでHTMLコードに変換します
  • HTMLテーブルを手動で記述し、Ajaxを介してデータを挿入します

これらの3つのオプションにはすべて、欠点があります。たとえば、jQueryを使用してテーブルの行を選択できる必要があります。これは、テーブルのHTMLコードがAjaxを使用してページに読み込まれるときに実行する方法がわかりません... HTMLテーブルは手動でその問題を解決しますが、テーブルには可変数の行が必要です。

まだ考えていないオプションはありますか?他に何かアドバイスはありますか?

4

3 に答える 3

1

ある種のファイルキャッシュまたはmemcacheを使用して、1と3の方法を組み合わせて使用​​しますが、データベースは使用しません(遅くする必要があります)。必要なパラメーターを使用して必要なブロックの html を 1 回生成し、それをファイルにキャッシュする必要があるため、(疑似コード) のようになります。

$aParams = ... lets tell that this is your params here;
$sBlockKey = 'my_block_'.md5($aParams);
if (cache::exists($sBlockKey)){
  $sMyBlock = cache::get($sBlockKey);
} else {
  $sMyBlock = generateMyBlockHtml($aParams);
  cache::add($sBlockKey, $sMyBlock);
}

return $sMyBlock;

このようにして、必要に応じてajaxでロードできます。

于 2012-06-15T11:41:15.530 に答える
1

場合にもよりますが、行と列の数が一定でない限り、1 または 2 を使用します。

オプション 1 には、PHP で HTML を生成する方が Javascript よりも実用的に実行できるという利点があります。そのため、非常に迅速に何かを作成する必要がある場合、またはサーバー側に既にテンプレート システムが配置されている場合は、オプション 1 を試してください。大きな欠点このアプローチの重要な点は、サーバーが「正常な」HTML を送信することを信頼する必要があることです。AJAX 呼び出しに SSL を使用しない場合、単純な MITM 攻撃で悪用可能な XSS コードを簡単に挿入できます。また、サーバーが何らかの理由で壊れた HTML を送信した場合、それを検出することは困難であり、おそらく回復することは不可能です。

したがって、通常はオプション 2 を好みます。この時点では HTML を気にすることさえせず、代わりに DOM を直接操作するだけです。つまり、次のようになります。

  • データ行をループします。行ごとに tr 要素を作成し、それをテーブルの本体に追加します
    • 列をループします。行ごとに td 要素を作成し、それを tr に追加します。.text()セルにコンテンツを追加するために使用します。

コード例:

function fillTable(data) {
    var tbody = $('<tbody/>');
    data.each(function (row) {
        var tr = $('<tr/>');
        tbody.append(tr);
        row.each(function (cell) {
            var td = $('<td/>');
            tr.append(td);
            td.text(cell);
        });
    });
    $('#myTable>tbody').replaceWith(tbody);
}

この方法では、DOM ノードを直接挿入しているため、HTML エンコーディング (および XSS) について心配する必要はありません。ブラウザーは HTML の解析をまったく行いません。

于 2012-06-15T11:43:33.817 に答える
0

私はこの 2 つの jquery プラグインhttp://datatables.net/http://www.trirand.com/blog/を使用しています。動的にロードされたデータと、行の選択、フォーマットなどを処理する良い方法があります。

于 2012-06-15T11:54:52.533 に答える