为什么在没有被调用时添加它

时间:2015-09-04 22:59:40

标签: javascript php html session session-cookies

我制作了一个我正在制作购物车的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

1 个答案:

答案 0 :(得分: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。您知道,它不需要比我上面编写的代码更复杂。然后在后端,如果任何用户向该URL发出POST请求,则只需向会话添加+1。

但是如果您不想要ajax,则需要在单击“添加”按钮时重新加载页面。就像在评论中所说的那样,在添加按钮周围添加一种类型的帖子(并且有一个好的网址,让你的服务器知道这是一个发生的添加项目事件),并使添加按钮成为提交类型。然后根本不需要javascript。