3

初めてのシングル ページ アプリケーションに取り組んでいますが、ページ データを保存する最善の方法がわかりません。

ページのコンテンツがデータベースに保存されるように設定しました。ユーザーがナビゲーション リンクの 1 つをクリックすると、プロセス ファイルへの ajax 呼び出しが行われ、ページのコンテンツが抽出され、json としてフォーマットされ、エコーされます。 jQuery がページに入力できるように戻します。

私が抱えている問題は、データベース内のページ コンテンツのいずれかに PHP が含まれている場合、PHP が処理されていないか、表示されていないことです (ただし、ソースを表示すると生の php が表示されます)。コードが実行されるようにするためのより良い方法はありますか?

私の Ajax コール:

$("nav a").click(function(e) {
    e.preventDefault();
    var page = $(this).attr("href");
    $("nav a").removeClass("menuSelected");
    $(this).addClass("menuSelected");

    form_data = {
        action: "load",
        page: page,
        is_ajax: 1
    }

    $.ajax({
        type: "post",
        url: "process.php",
        dataType: "json",
        data: form_data,
        success: function(data) {
            if(data.success === "true") {
                $("#asideLeft").html(data.aside_left);
                $("#contentMiddle").html(data.content_middle);
                $("#asideRight").html(data.aside_right);
            } else {
                $("#contentMiddle").html("<h1>AJAX Failure</h1>");
            }
        }
    });

ユーザーがリンクをクリックしたときに呼び出される私の PHP コード:

if($action == "load") {
    $pms->connect();
    $result = $pms->dbh->prepare("SELECT * FROM pages WHERE name=:name");
    $result->execute(array(':name' => $page));
    $page = $result->fetch(PDO::FETCH_OBJ);
    $data['success'] = "true";
    $data['aside_left'] = $page->aside_left;
    $data['content_middle'] = $page->content_middle;
    $data['aside_right'] = $page->aside_right;
    echo json_encode($data);
}

データベースに保存されている HTML/PHP のサンプル:

<h1>Content Middle</h1>
<p>Today is <?php echo date("Y-m-d H:i:s"); ?> </p>

あなたが提供できる助けや提案をありがとう。

4

3 に答える 3

1

質問に+1。PHP コードと (データベースからの) html を分離する必要があることに同意します。特に、サーバー側で json データを組み立てている間、現在データベースに保存しているすべての php コードを呼び出す必要があります。したがって、データベースに保存する代わりに、次のようにします。

<p>Today is <?php echo date("Y-m-d H:i:s"); ?> </p>

次のように書くことができます。

$data['success'] = "true";
$data['aside_left'] = $page->aside_left;
$data['content_middle'] = $page->content_middle;
$data['aside_right'] = "<p>Today is" . date("Y-m-d H:i:s") . "</p>";
echo json_encode($data);

はい、これは単にデータベースからデータを取得するほどクリーンではありませんが、サーバー側のスクリプトはすべてサーバー側で実行する必要があります。特にこのような問題 (今日の日付の印刷など) は、JavaScript を使用して解決できます。JavaScript はデータベースに簡単に保存できます (たとえば、サーバー側に読み込まれると現在の値を返す関数をデータベースに保存します)。日にち)。これは、次のようなレコードをデータベースに保存すると実現できます。

"<p><script>(new Date()).toString('dddd, MMMM ,yyyy');</script></p>"

読み込まれると、 pタグ内に現在の日付が表示されます。

別の解決策として、JavaScript が単にオプションではなく、PHP を使用する必要がある場合、これはサーバー側への別の要求で実現できます。

.
.
$data['aside_right'] = "<p>Today is:<script> $.ajax({type:'post',url:'processSomeMore.php',dataType:'json',data:form_data,success:function(data) {...}});
</script></p>";
echo json_encode($data);

JavaScript コードが、データベースから取得した残りの html と共にクライアントに送信されると、サーバーに別のリクエストを発行し、ajax を介して追加のデータを要求します。これがあまり混乱しないことを願っています:-)。

于 2012-11-14T01:04:18.743 に答える
0

これは、php がサーバー側のスクリプト lan であり、ajax を介して php スクリプトから結果をロードする js/jquery スクリプトでない限り、それをクライアントに解析できないためです。

于 2012-11-14T00:08:59.523 に答える
0

データベースの内容だけをエクスポートすることはできません。を通過する必要がありますeval()。しかし、あなたの例でこれが特に難しいのは、evalPHPコードのみを処理することです。あなたが提供する PHP と HTML の組み合わせを扱うことはできません。したがって、データベースのスニペットをすべて PHP のみにする (HTML のものをecho-ed またはprinted にする) か、時間とエネルギーを費やしてそれらを分離する方法を理解する必要があります。(後者の問題は、最初は正規表現のように見えるかもしれませんが、完全に解決するのは本当に難しいことがわかります)。

しかし、あなたが見たいのは、完全な PHP と HTML の組み合わせではなく、むしろテンプレート言語です。たとえば、Smarty で処理する Smarty スニペットを、配信前にデータベースに保存しますか? (私たちは、このようなデータ フロー (AJAX 経由のスマートな出力) を使用して、独自の 2 つの製品で成功を収めました。)

于 2012-11-14T00:09:08.070 に答える