2015-09-04 54 views
0

我做了我建立做一個購物車的JavaScript代碼,但即使我不點擊它運行這些代碼:爲什麼加入時,它不會被調用

function addProduct(prodId) { 
    var sessionDivId = document.getElementById(prodId); 
    if (prodId) { 
    sessionDivId.innerHTML = '<?= $_SESSION['product_id_1']+=1 ?>'; 
    } 
} 
<div onclick="addProduct('testSession1');">ADD</div> 
<div id="testSession1"></div> 

每次刷新網站時,即使我沒有點擊「添加」按鈕,它也會將1添加到會話testSession1

+3

不要忘記,PHP在JavaScript之前執行,所以即使JavaScript沒有在瀏覽器中執行,服務器已經處理了PHP。在這種情況下,服務器將看到呼叫將1添加到會話變量,因此將添加它。如果你需要達到這個目的,最好的方法是使用ajax來調用一個添加到session變量的php腳本。 – RamRaider

+0

我從來沒有使用AJAX,我搜索了它,但人們給我太寬的東西,當我只想要一些東西開始,所以我可以自己建立:)如果你可以提供的東西編號感激 –

+1

如果你要忽略阿賈克斯你可以可能會讓JavaScript將表單提交到同一頁面,然後測試POST - 一旦您有POST請求,那麼您可以增加會話變量。即:'if($ _SERVER ['REQUEST_METHOD'] =='POST'){/ * increment session var * /}' – RamRaider

回答

1

您的PHP邏輯將在用戶加載頁面之前在服務器上運行。要添加產品,您需要將其存儲在其他地方(因爲PHP不再有任何控制權將+ = 1放到購物車中)。

我會做一個AJAX請求來發布產品ID用戶的購物車:

function addProduct(prodId) { 
    // using jQuery for simplicity of writing 
    $.ajax({ 
     type: "POST", 
     url: "/cart/item/" + prodId,   // or other backend API endpoint 
     success: displayNiceUserMessage() 
    }); 
} 

,當然還有一些錯誤的東西的情況下處理出錯。

更新

我看到你不想使用Ajax。只是你知道,它不需要比我上面寫的代碼更復雜。然後,在後端,如果任何用戶向該網址發出POST請求,則只需向會話中添加+1即可。

但是,如果你不想要ajax,你需要在點擊添加按鈕時重新加載頁面。就像在評論中說的那樣,在添加按鈕周圍放置一個類型帖子的表單(並且使用一個好的url來讓你的服務器知道它是發生的一個添加項目事件),並且使添加按鈕成爲一個提交類型。那麼根本就不需要JavaScript。

+0

謝謝你,這完美的工作!是否有任何可能的方式來獲得會話ID的實時打印機?像showProduct ajax? –

+1

是的,在成功函數中,您可以使用+1更新'document.getElementById(prodId).innerHTML'值 – William

相關問題