say У меня есть 3 продукта в корзине, я хочу удалить, скажем, 2 из 3 предметов, после того как первый элемент удален просто отлично, другие предметы не будут удалены. после некоторого тестирования я увидел, что до удаления продукта данные были массивом, а после удаления продукта массив преобразовывался в объект.проблема с удалением объекта из массива
, например: 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);
который также кончался изменения массива объекта
Можете ли вы создать jsfiddle, чтобы проверить его? – nils
@ nils, я попробую, может потребоваться некоторое время. – KickRAzz
Удаление не похоже на проблему: http://jsfiddle.net/Lfudroe4/ Я думаю, что это имеет какое-то отношение к 'data' переменная, которая исходит из вашего ответа JSON. Кроме того, почему вы удаляете строку заказа на стороне клиента, а не на сервере? – nils