2011-04-06 73 views
0

讓我們說你有一個項目列表,你點擊添加按鈕。項目名稱將被添加到籃子框中。更新購物車Basket - ajax or without ajax?

這樣做的最佳做法是什麼?

1)當您點擊添加按鈕時,項目數據將通過ajax添加到購物車會話中,然後通過ajax重新顯示購物籃。

2)與數字1相同,但添加到DB cart_temp表而不是購物車會話? 3)如果沒有Ajax,當你點擊Add按鈕時,新的元素/標籤將通過JavaScript在籃子框中創建。商品名稱和價格將被添加。在Basket Box的底部,會出現一個「繼續」按鈕。點擊繼續按鈕,然後將來自購物車元素/標籤的數據放入會話或數據庫中。如何使用jquery獲取元素項目和價格值?

4)或者你的解決方案是什麼?

+1

精神食糧:最好既支持Ajax方法,也支持非Javascript方法。對於因安全(或其他)原因而禁用Javascript的用戶,您希望它正常降級。 – Guttsy 2011-04-06 19:15:15

+0

^同意了,如果這是您正在製作的某種形式的公共Web應用程序,我會建議您制定Ajax/JavaScript方法和php方法。 – 2011-04-06 19:17:35

回答

1

對於與購物車管理有關的所有問題沒有一個通用的解決方案。解決方案對於每個人來說都是通用的。但是有測試和良好的工作設計模式。此外,我可以通過我的軟件知道我正在使用哪種模型。

首先你要知道每個價格修改,折扣,促銷代碼都可以修改原來的產品價格。使用JavaScript計算它可能不太穩定和不可靠。 應該有一個/很少的可信方法來返回分配給購物車的信息,例如

class Cart { 
    public function getTotalGrossPrice() { ... } 
    public function getTotalNetPrice() { ... } 
} 

方法將返回固定值例如加稅或什麼的。其次,你需要使用Ajax來管理它。我更喜歡以JSON格式獲取所有數據。

$.getJSON('/cart/getTotalGrossPrice.html');

看:http://api.jquery.com/jQuery.getJSON/

,當你有一個方法來獲取車總價它是簡單的無處不在獲取你的網站上。當像一個類一樣有一箇中心位置時,引入像促銷代碼這樣的新功能將不那麼痛苦。想象一下,在您的網站上沒有幾個地方的價格是通過JavaScript計算的,編輯時很容易出錯。

http://yuml.me/8317d38

這種模式與結構的網站像一個API架構來實現共同的。

也許它會幫助你,祝你好運。

+0

感謝您提供詳細的回覆,這非常有幫助。只是一個簡單的問題..我不必使用$ _SESSION來存儲購物車數據。我可以簡單地保存在購物車類中? – user622378 2011-04-06 21:07:37

+0

您必須將購物車存儲在MySQL等數據庫中,類只是一個抽象,可以幫助你獲取籃子細節。 Ajax請求應該調用Class抽象,它會向DB請求數據。將產品存儲在$ _SESSION中並不是一個好主意,因爲它可以快速增長,並且在客戶放棄會話時不會存儲數據。 – 2011-04-07 18:29:34

0

我認爲你所做的AJAX調用越少越好。我選擇了第四種解決方案(#4)。基本上在項目點擊你可以(谷jQuery的)添加一些HTML隱藏字段,例如:

<div id="item-list" style="display: none;"> 
    <div class="item" id="12345"></div> 
    <div class="item" id="12346"></div> 
    ... 
</div> 

,然後創建一個「繼續」按鈕之後處理一切。 至少,我會這樣做。

回答這個:

如何使用jQuery獲取元素項目和價格的價值?

您應該從您的價格字段中拿出來並添加它以顯示它的當前價格。但是我會避免將價格存儲在HTML頁面或Javascript中:最好讓PHP腳本計算髮送產品列表的實際價格。

+0

什麼是HTML隱藏字段?請澄清感謝 – user622378 2011-04-06 20:24:40

+0

@ user622378,他們將存儲所選項目,以便通過AJAX請求輕鬆發送它們。 – Shoe 2011-04-06 20:25:34

0

最好的選擇是通過AJAX往返服務器,然後發回籃子的HTML。 HTML太小了,無論如何AJAX開銷會花費更多時間,但是您確實需要使用服務器端邏輯來獲得定價權。

如果降級對於非JavaScript非常重要,請刷新整個頁面。