【发布时间】:2014-05-18 14:05:40
【问题描述】:
我已经使用 stackoverflow 回答了几乎所有关于 php 脚本的问题,在这里我学到了关于 ajax 调用、jquery 和 javascript 相关问题的最多知识。我现在有一个,但是我似乎找不到答案,而且我不确定我做错了什么。
基本上,它是一个购物车,它使用 ajax 调用将产品 ID 存储在会话中 - 在 ajax 调用成功后,如果购物车托盘被隐藏(当它尚未设置时),它应该会出现。然而,问题是,即使是最基本的 ajax 调用也会中断。我的 HTML 看起来像这样(每个产品),缩短了 url,因为它们与示例无关,它们只是链接到产品页面:
<article>
<a href="#">
<img nopin="nopin" alt="#" src="#">
</a>
<h5>
<a href="#">Product name</a>
</h5>
<p class="price">
<a href="#">€ 0,00</a>
</p>
<input type="button" name="bestelknop" id="bestelknop" data-id="'.$product['p_id'].'" value="In winkelmandje">
</article>
我使用 ajax 调用来解析一个 php 文件,该文件的唯一功能是更新购物车:
<?php
session_start();
if(isset($_POST['p_id'])) {
$p_id = $_POST['p_id'];
$_SESSION['cart'][$p_id]++; //add one to the quantity of the product with id $product_id
}
?>
ajax 调用如下所示:
$(document).ready(function() {
$("#bestelknop").click(function() {
var p_id = $(this).attr('data-id');
$.ajax({
type : 'POST',
url : '/paginas/winkelmandje/toevoegen.php',
data: 'p_id='+p_id,
success : function(data){
$( "#nav-winkelmandje" ).load('/menu/winkelmandje.php');
if($( "#nav-winkelmandje" ).is(':hidden')) {
$( "#nav-winkelmandje" ).slideDown();
}
},
error : function(XMLHttpRequest, textStatus, errorThrown)
{alert ("Er is iets fout gegaan bij het bestellen. Druk op F5 en probeer het opnieuw.");}
});
});
});
现在的问题是;第一次工作。我单击一个产品的按钮,ajax 调用成功并且生成的 div 可见(显示您的购物车中有产品)。当我现在单击另一个带有另一个数据 ID 的产品时,ajax 调用根本不会触发。我完全不知道为什么会发生这种情况,还有其他人有线索吗? chrome 和 php 错误报告中的元素检查会给我任何错误。
提前致谢,
斯蒂芬
编辑:单击的第一个产品的按钮仍然有效。我可以将更多该产品添加到会话中,但其他按钮不起作用。
编辑 2:按钮无法正常工作可能是因为我在 javascript 中使用了 id 作为选择器。我现在已将其更改为类并且该函数会触发,例如,我设置了一个警报以查看是否调用了 java,并且确实如此。但是,ajax 调用不会触发并且仍然没有响应。
【问题讨论】:
-
$_SESSION['cart'][$p_id]++;这是什么意思? -
这会将产品 id 设置为 session['cart'] 键,数量作为其值。如果不设置,默认数量为1个。
-
最初,我认为向您的网址添加缓存破坏器可能会有所帮助。但是,您是否希望 data-id 属性中的值在 ajax 发布后发生变化?
-
否,数据 id 用于标识要添加到会话中的产品,并且对于每个按钮都是唯一的。
标签: php ajax session-variables shopping-cart