讓我們假設一個簡單的例子,一個博客在 html、php 和 javascript 上運行。當頁面被加載時,我運行了一個 php 腳本,例如迭代地將所有評論放在博客文章下。評論的列印是以面向物件的方式完成的,其中評論由一個類和一個成員函式表示,該成員函式print_comment()與評論欄位相呼應,包括發布日期、作者、文本等:
// in the comment class declaration
class comment
{
$id; // unique identifier of comment
$dateSubmission; // date when comment was submitted
$text; // content of comment
$author; // who wrote it
function __construct($id)
{
$this->load($id);
}
function load($id)
{
// here i load all info from mysql database for the defined id
}
function print_comment($id)
{
echo "<div class=\"comment-container\">";
echo "<div class=\"comment-author\">";
// etc etc
echo "</div>";
echo "</div>";
}
}
// in the blog.php file
$ids = getCommentIds($postId); // returns comment ids for current blog post
$nComments = length($ids);
for ($iComment = 0; $iComment < $nComments; $iComment )
{
$currComment = new comment($ids[iComment]); // loads content for comment
$currComment->print_comment(); // prints comment
}
現在用戶添加另一條評論,在單擊提交按鈕并通過 ajax 呼叫處理所有資料庫內容后,我想在現有評論串列下添加新評論。理想情況下,我現在喜歡使用我已經準備好的 php 類來創建文本,但到目前為止我總是需要在 javascript 中重寫內容創建。
處理這種情況的最佳方法是什么?在 javascript 中重寫 print_comment 函式將是一種方法,但它是雙重作業,并且每當我更新布局時都需要更改兩個函式。
這種情況的最佳做法是什么?
PS:我知道重新加載整個頁面是一種解決方案,但不是我想要的:)。
uj5u.com熱心網友回復:
不幸的是,您最終總是需要在 JavaScript 中撰寫動態加載內容。PHP 在服務器上運行并提供靜態檔案。如果你想更新頁面的一部分(而不是提供一個全新的頁面),這必須在客戶端上完成,這意味著使用 JavaScript。
uj5u.com熱心網友回復:
解決方法有多種途徑。
- 在表單提交時重繪 頁面,這是使用 PHP 的標準方式,這種方式沒有任何問題。
- 重復功能,因此您不必重繪 整個頁面,只需使用 javascript 添加評論者回復即可。除了代碼重復之外的缺點是在您硬重繪 頁面之前您不會收到其他新評論。
- 前端只用JS,后端只用PHP。這樣您就可以加載部分資料而無需進行完整的頁面重繪 。不利的一面是,您仍然需要重復代碼,因為您需要前端和后端驗證。
- 現在我們要進行一些極端的重寫,但您也可以考慮使用 nodeJS 作為后端,并用 javascript 撰寫整個應用程式。這使您可以選擇在前端和后端之間共享庫,從而完全消除代碼重復。作為額外的好處,添加 websockets 相對容易,這意味著您可以在發送新評論時向每個連接的閱讀器推送新評論。
- 不要費心撰寫自己的博客,而是依靠久經考驗的平臺。
最后一個可能是最好的解決方案。
但是,如果您撰寫博客應用程式只是作為練習,我會選擇選項 4,我認為這為您提供了最全面的推動自己的基礎。在 nodeJS 中開始撰寫 REST-api 很容易,并且有很多庫可以幫助您完成繁重的作業。擁有完整的 API 后,您可以使用 vanilla javascript 撰寫一個簡單的前端,或者您可以選擇任何前端框架。您可以添加 socketIO 以獲得一些實時評論并運行,并且您可以使用不同的框架創建另一個前端。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/363952.html
標籤:javascript php mysql 阿贾克斯
