使用LocalStorage保存和加载购物车

时间:2019-03-11 19:13:41

标签: javascript local-storage cart shopping-cart shopping

我有以下代码:

inames = [];
iqtyp = [];
iprice = [];

function bestel() {
  inames.push(document.getElementById('artikel').innerHTML);
  iqtyp.push(parseInt(document.getElementById('hoeveel').value));
  iprice.push(parseInt(document.getElementById('prijs').innerHTML));
  displayCart();
}

function displayCart() {
  cartdata = '<table><tr><th>Product Name</th><th>Quantity</th><th>Price</th><th>Total</th></tr>';
  total = 0;
  for (i = 0; i < inames.length; i++) {
    total += iqtyp[i] * iprice[i];
    cartdata += "<tr><td>" + inames[i] + "</td><td>" + iqtyp[i] + "</td><td>" + iprice[i] + "</td><td>" + iqtyp[i] * iprice[i] + "</td><td><button onclick='delElement(" + i + ")'>Delete</button></td></tr>";
  }
  cartdata += '<tr><td></td><td></td><td></td><td>' + total + '</td></tr></table>';
  document.getElementById('cart').innerHTML = cartdata;
}

function save() {
  localStorage.setItem("car", cartdata);
}

function load() {
  document.getElementById("cart").innerHTML += localStorage.getItem("car");
}

我希望用户能够保存购物车并在刷新页面时再次加载它。我该怎么办?

现在,我添加了保存和加载功能,但现在它没有将项目添加到表中,它只是复制了整个表。

2 个答案:

答案 0 :(得分:0)

您可以使用HTML5 localstorage,因为存储在javascript变量中的信息将随着页面刷新而被刷新

但是最好的方法是通过一些其余的API调用将这些信息持久化到您的后端(或Web服务器)。因此,即使用户从其他计算机登录,他的确也会看到他添加到购物车中的物品。

理想情况下,您应该将数据存储在localStorage中,而不是HTML中-由于数据更具操纵性,因此请修改代码:

inames = [];
iqtyp = [];
iprice = [];

function bestel() {

  load()

  inames.push(document.getElementById('artikel').innerHTML);
  iqtyp.push(parseInt(document.getElementById('hoeveel').value));
  iprice.push(parseInt(document.getElementById('prijs').innerHTML));
  displayCart();

  save()
}

function displayCart() {
  cartdata = '<table><tr><th>Product Name</th><th>Quantity</th><th>Price</th><th>Total</th></tr>';
  total = 0;
  for (i = 0; i < inames.length; i++) {
    total += iqtyp[i] * iprice[i];
    cartdata += "<tr><td>" + inames[i] + "</td><td>" + iqtyp[i] + "</td><td>" + iprice[i] + "</td><td>" + iqtyp[i] * iprice[i] + "</td><td><button onclick='delElement(" + i + ")'>Delete</button></td></tr>";
  }
  cartdata += '<tr><td></td><td></td><td></td><td>' + total + '</td></tr></table>';
  document.getElementById('cart').innerHTML = cartdata;
}

function save() {
  localStorage.setItem("inames", inames.join("|"))
  localStorage.setItem("iqtyp", iqtyp.join("|"))
  localStorage.setItem("iprice", iprice.join("|"))
}

function load() {

   inames = (localStorage.getItem("inames") || "").split("|")
   iqtyp = (localStorage.getItem("iqtyp") || "").split("|")
   iprice = (localStorage.getItem("iprice") || "").split("|")
}

您可能还希望在设置项目时添加异常处理,请在此处查看:https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem

答案 1 :(得分:0)

您确实要存储此数据服务器端,因为用户可以从许多不同的计算机访问您的站点/应用程序。 HTML5 localstorage在每台计算机上都是本地的。

这可以归结为一个系统,在该系统上,用户与您的应用进行交互时,会匿名登录,但具有唯一的服务器端ID。他们登录(创建帐户)后,即可将其帐户合并到其匿名帐户。现在,当用户从另一台/办公计算机登录到您的网站时,购物车仍然在那里。

从头开始设置并不容易,因此有很多开发人员产品/系统可以为您进行繁重的工作,例如Firebase