0

ショッピング カートに 3 つのアイテムがあるとします。3 つのアイテムのうちの 2 つを削除したいとします。最初のアイテムが問題なく削除された後、他のアイテムは削除されません。いくつかのテストの後、製品を削除する前はデータが配列であり、製品を削除した後、配列がオブジェクトに変換されることがわかりました。

例えば: Basket {Klant: Object, Orderlines: Array[0]}

いくつかの項目を追加した後:Basket {Klant: Object, Orderlines: Array[3]}

配列には 3 つのオブジェクトがあります。

{"Klant":{},"Orderlines":[
{"id":"2793","number":1,"membershiptype":"New","lineid":"3521"},
{"id":"2802","number":1,"membershiptype":"New","lineid":"3522"},
{"id":"2803","number":1,"membershiptype":"New","lineid":"3523"}
]}

アイテムを削除した後:Basket {Klant: Object, Orderlines: Object}

オブジェクトにはまだ2つのオブジェクトがあります:

{"Klant":{},"Orderlines":{
"0":{"id":"2793","number":1,"membershiptype":"New","lineid":"3521"}
"2":{"id":"2803","number":1,"membershiptype":"New","lineid":"3523"}
}}

配列をスプライシングして削除しようとしましたが、同じ結果になりました。私は結果が欲しい:

{"Klant":{},"Orderlines":[
{"id":"2793","number":1,"membershiptype":"New","lineid":"3521"},
{"id":"2803","number":1,"membershiptype":"New","lineid":"3523"}
]}

ここに私のコードがあります:

function Basket() {
  this.Klant = {};
  this.Orderlines = [];
  Basketdata = null;
  // check if we have storage and can use it.
  if (typeof (Storage) !== "undefined") {
        Basketdata = sessionStorage.getItem("Basket");
        total = sessionStorage.getItem("aantalitems");
        $('#aantalitems').html(total);

        console.log(Basketdata);
        if (Basketdata != null) {
              mybasket = JSON.parse(Basketdata);
              this.Orderlines = mybasket.Orderlines;
              this.Klant = mybasket.Klant;
        }
  }
  if (Basketdata == null) {
        Basketdata = {};
  }
  $('a.addcart').on('click', {this: this}, this.addArticle);
  $('a.remove_cart_item').on('click', {this: this}, this.deleteArticle);
  $('input.ChangeAmount').on('keyup change', {this: this}, this.changeAmount);

}

Basket.prototype = {
  constructor: Basket,

deleteArticle: function (event) {
        var knop = $(event.currentTarget);
        var mainartikel = $(knop).parents('tr.cart_item');
        var id = $(mainartikel).attr('id');
        var total = 0;
        for (var i in  event.data.this.Orderlines) {
              var line = event.data.this.Orderlines[i];
              if (line.lineid === id) {
                    console.log(event.data.this.Orderlines[i]);
                    console.log(i);
                    event.data.this.Orderlines[i].delete = 1;
              } else {
                    total += line.number;
              }
        }
        sessionStorage.setItem("aantalitems", total);
        $(mainartikel).fadeOut(function () {
              $(this).remove();
        });
        sessionStorage.setItem("Basket", JSON.stringify(event.data.this));
        event.data.this.sendToServer(event.data.this);



  },
 sendToServer: function (object) {
        $.ajax({
              type: "POST",
              url: '/shop?addtoorder=1',
              data: JSON.stringify(this),
              dataType: 'json',
              databasket: object
        }).done(function (data) {
              this.databasket.Orderlines = data.Orderlines;
              for (var i in  this.databasket.Orderlines) {
                    if (this.databasket.Orderlines[i].delete == 1) {
                        //here is the delete
                          //delete this.databasket.Orderlines[i];
                          this.databasket.Orderlines.splice(i,1);
                    }
                    if (this.databasket.Orderlines[i].update == 1) {
                          this.databasket.Orderlines[i].update = 0;
                          location.reload();
                    }
              }
              sessionStorage.setItem("Basket", JSON.stringify(this.databasket));
              $('#totalprice').html(data.total);
              if (this.databasket.Orderlines.length == 0) {
                    this.Orderlines = [];

                    $('div.content').html('\
<div style="float: left;"><b><a href="../../../shop"><img src="../../lib/items/Checkout/template/go-home-icon.png" width="32" height="32" alt="go-home-icon"  style="vertical-align: middle;"> Back to the shop</a></b></div>\n\
<br><br>No items in basket\n\
');
              }
        });
  }};

私がこれまでに試したこと:

deleteArticle の下で私は変更しようとしました:event.data.this.Orderlines[i].delete = 1;

に:delete event.data.this.Orderlines[i]

また、配列をオブジェクトに変更することになりました

sendToServerの下で私は両方を試しました

delete this.databasket.Orderlines[i];
this.databasket.Orderlines.splice(i,1);

また、配列をオブジェクトに変更することになりました

4

1 に答える 1

0

試す:

delete yourObj['Orderlines']

var obj = {Basket: {Klant: Object, Orderlines: Array[0]}};
obj['Orderlines'] = [
{"id":"2793","number":1,"membershiptype":"New","lineid":"3521"},
{"id":"2802","number":1,"membershiptype":"New","lineid":"3522"},
{"id":"2803","number":1,"membershiptype":"New","lineid":"3523"}
];
document.write('After adding to obj[\'Orderlines\']: ' + obj['Orderlines'] + '<br/>');
delete obj['Orderlines'];
document.write('After deleting from obj[\'Orderlines\']: ' + obj['Orderlines']);

于 2015-10-15T12:24:14.860 に答える