簡體   English   中英

使用動態php內容加載ajax網站的好習慣

[英]Good practice for ajax site loading with dynamic php content

我有點淹沒在這里。 我有一個相當動態的內容的項目,所以它是用PHP編寫的。 根據用戶輸入,加載不同的文件。 到目前為止沒有問題,但我也想使用ajax(jquery)加載內容(如果用戶有js),那就是我被卡住的地方。

對於我的PHP網站結構,我有這樣的事情:

switch ($input) {
    case 'foo': require 'foo.php';
    break;

    case 'bar': require 'bar.php';
    break;
}

並且在實際內容區域中有一些功能

<div id="content"><php echo content_function(); ?></div>
<div id="sidebar"><php echo sidebar_function(); ?></div>

這些函數在bar.php和foo.php中定義。 這樣我就不必在我的html中間使用不同的switch / if-else語句,整個文件處理都在switch語句中完成。

現在加載jquery時我顯然不能重新實例化內容和側邊欄中的函數而不重新加載會使ajax加載無用的頁面。 所以我在foo.php和bar.php中添加了一些額外的代碼,以便能夠將每個函數分別實例化到相應的div中(事先清空它們之后)。 例如

if(isset($_POST) && $_POST['load_content_func']) { echo content_function(); }
if(isset($_POST) && $_POST['load_sidebar_func']) { echo sidebar_function(); }

然后我只是獲取每個ajax請求的輸出並將其加載到內容和側邊欄中:

var foo_or_bar; //depending on user input either foo or bar
if (foo_or_bar == 'foo') {

    $.ajax({  
      type: "POST",  
      url: "foo.php",  
      data: load_content_func,  
      success: function(html) {  
        $('#content').html(html);

    $.ajax({  
      type: "POST",  
      url: "foo.php",  
      data: load_sidebar_func,  
      success: function(html) {  
        $('#content').html(html);
}

注意:所有的代碼都只是一個例子而且是從我腦海中寫出來的,只要你知道我想做什么,如果有些錯誤就沒關系!

不知怎的,它感覺不對,但作為奇怪的完美主義者,我從來沒有真正開心,所以它可能只是我。 做這樣的事情是否有良好的做法,你通常如何解決這個問題? 歡迎所有建議!

這就是事情,我希望它不會因為它是一個普遍的反應並提出更多問題而不是答案而加重:

您提出的方法是,根據用戶交互,可能會加載新內容,並且在加載新內容時,還會加載新的側邊欄。 我對此有一些想法,並提出一個警告:我不是世界上最有經驗的PHP開發人員。 也就是說,這是我最初的想法(它們並非都與彼此有關):

A)人們使用Ajax的原因各不相同:最小化檢索的數據,避免重新加載整個頁面的視覺“閃存”,我確信還有其他原因。 要確定Ajax是否是工作的工具,您需要決定“為什么”使用它。

B)如果您總是檢索“foo”側邊欄以使用“foo”內容,為什么不立即獲取它們呢? 無論您的PHP邏輯在服務器端是什么,它都可以返回一個請求:

<div id="content">.. all my content...</div>
<div id="sidebar">.. my sidebar ...</div>

很少有結構良好的頁面會有任何標記將內容與側邊欄分開。 不過,你的可能是一個人; 我肯定不知道。

C)如果您總是檢索“foo”側邊欄以使用“foo”內容,並且您無法按順序標記返回它們(如上所述),您仍然可以只請求foo.php一次,並在成功函數中可以解析HTML並將其發送到您的兩個獨立區域。

D)如果你把你的“foo”側邊欄和這樣的內容緊密結合在一起,你可能需要稍后重新設計它。 如果您認為“foo”和“bar”內容區域實際上可以共享“baz”側邊欄怎么辦? 您提出的方法意味着您需要對“baz”內容進行邏輯檢查,以便與“baz”側邊欄一起使用。

E)如果你不喜歡我的建議只是同時獲得內容和側邊欄,我發現做兩個獨立的,不同的Ajax調用沒什么特別的錯誤。 有些人會想出一個聰明的方法來使用迭代器,這樣你只需要指定一次“foo.php”(即使正在進行兩次調用),它也會自動抓取它們。 但是,好吧。 當兩個獨立且不同的調用使得非常清楚預期目的是什么時,為什么使代碼深奧且難以閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM