2011-01-10 29 views
2

我有一個產品頁面鏈接「添加到購物車」,當它被點擊時,它發送一個通過jQuery的ajax請求到一個名爲cart_process.php的頁面,並將該項目添加到購物車。有沒有辦法刷新一個PHP包含文件而不刷新整個頁面?

$_COOKIE['cart']; 

存儲的附加產品的MySQL的記錄ID用連字符分隔像這樣一起:

11-36-33- 

要顯示的號碼

的購物車通過cookie叫車的工作原理購物車中的商品我只需要計算cookie中連字符的數量:

substr_count($_COOKIE['cart'], '-'); 

,我在稱爲header.php的頭文件中回顯了這一點,並且在購物車頁面中「包含」了該文件。

現在的問題是,當用戶將物品添加到購物車時,cart_process.php文件會提示消息「物品已成功添加」,但是從header.php顯示的購物車中物品的數量仍未更新。

這是因爲header.php文件沒有刷新,我看到如何刷新它的唯一方法是刷新整個產品頁面。但是,這打敗了阿賈克斯的美麗。

所以我的問題是,有沒有辦法刷新頁面上的一個包含文件,而無需刷新頁面本身。在這種情況下,產品頁面上的header.php?

回答

2

直接修改DOM;我傾向於使用上的元素類,以確定他們,所以我可以做

<span class='total_cart_quantity'>$value</span> 

然後在Ajax回調的JS

$(".total_cart_quantity").html(new_quantity) 

主要是我傾向於從包含列表我的Ajax程序返回JSON回需要更新的元素,但只需從PHP回顯新的計數並抓取並顯示它就足夠了。通過向HTML添加一個類來識別使用的美妙之處在於,您可以通過一次點擊就可以獲取頁面上的所有值,而無需通過簡單地添加該類就可以知道它們在哪裏。

上面的例子使用JQuery;但是這個概念可以用於大多數高質量的腳本語言。

0

在PHP中,如果你設置一個cookie,但你仍然在同一個會議上,你需要在$ _COOKIE數組中的明確定義是這樣的:

setcookie("TestCookie", "test"); 
$_COOKIE["TestCookie"] = "test"; 

是的,我瞭解到這個硬盤辦法。

+0

好,這很容易解釋。除了$ GLOBALS以外,所有的超級全局變量都是在腳本啓動時創建/填充的,然後再也不會被PHP再次觸及。無論如何,你沒有回答用戶的問題。他想更新頁面的其他部分而不刷新整個事物。 –

+0

我誤解了這個問題,對不起。 – orlp

0

你想要做的是使用JavaScript更新標題。使cart_process.php頁面返回標題的新內容,或僅返回<div>,<p>或購物車內容所在的任何其他標記的新內容。然後,使用jQuery,使用jQuery返回該元素的內容由服務器。

除了使用AJAX,沒有其他方法可以刷新標題。如果上面的代碼很容易不符合您的代碼結構,那麼您可以在將商品添加到購物車之後發出第二個AJAX請求,以返回header.php的內容,並使用jQuery更新包含該新內容的標頭。

0

爲什麼不返回一個JSON對象,而不是僅僅返回一個簡單的true值或其他來自你的ajax處理的PHP腳本?該對象的一部分可以是購物車中現在的物品總數,客戶端腳本可以在輸出購物車數量的任何地方插入到DOM中。

當你正確地做到這一點時,購物車是實現的絕對最微不足道的事情。這是結帳/充電/庫存的東西,來事後說很複雜:

<?php 
if ($_SERVER['REQUEST_METHOD'] = 'POST') { 
    $itemID = $_POST['itemID']; 
    $quantity = $_POST['quantity']; 

    $_SESSION['cart'][$itemID] = $quantity; 

    $status['error'] = false; 
    $status['items_in_cart'] = count($_SESSION['cart']); 

    return(json_encode($status)); 
} 

和客戶端你有地方在你的頁面:

<div id="cart_item_count"></div> 

,做

$('#cart_item_count').html(response['items_in_cart']); 
相關問題