基本的に、div内のショッピングカートに商品を表示しようとしています。ショッピング カートは別の場所でホストされており、商品を取得するために、次のような json オブジェクトを返す getJSON リクエストを作成します。
{
"products":[
{
"id": "3045365",
"name": "Test Product",
"code": "foo123",
"image": "",
"url": "",
"length": "0",
"width": "0",
"height": "0",
"options": {"color":"red"},
"quantity": 1,
"price_each": 10,
"price": 10,
"weight_each": 1,
"weight": 1,
"shipto": "",
"category": "DEFAULT",
"sub_frequency": "",
"sub_startdate": "0000-00-00",
"sub_nextdate": "0000-00-00",
"sub_enddate": "0000-00-00"
},
{
"id": "3045366",
"name": "Second Product",
"code": "bar456",
"image": "",
"url": "",
"length": "0",
"width": "0",
"height": "0",
"options": {},
"quantity": 1,
"price_each": 100,
"price": 100,
"weight_each": 1,
"weight": 1,
"shipto": "",
"category": "DEFAULT",
"sub_frequency": "",
"sub_startdate": "0000-00-00",
"sub_nextdate": "0000-00-00",
"sub_enddate": "0000-00-00"
},
{
"id": "3045367",
"name": "Example Subscription",
"code": "xyz456",
"image": "",
"url": "",
"length": "0",
"width": "0",
"height": "0",
"options": {"color":"red"},
"quantity": 1,
"price_each": 6,
"price": 6,
"weight_each": 4,
"weight": 4,
"shipto": "",
"category": "DEFAULT",
"sub_frequency": "1m",
"sub_startdate": "2010-10-15",
"sub_nextdate": "2010-11-15",
"sub_enddate": "2013-01-01"
}
],
"product_count": 3,
"total_item_price": 116,
"total_discount": -5,
"total_price": 111,
"total_weight": 6,
"session_id": "9bpdjvm2ju0bulm6d7kkcf6d31",
"coupons":{
"test2":{
"id":"201",
"name":"test for line item coupon discount",
"discount":-5}
},
"custom_fields":{
"my_hidden_value":"I'm hidden!",
"example_hidden":"value_1"
},
"messages":{
"errors":[],
"warnings":[],
"info":[]
}
}
私の現在のコードは、ユーザーが [カートに追加] をクリックすると、div が空かどうかを確認します。そうであれば、json オブジェクトから最初の製品を追加します。
div が空でない場合は、div の最初の製品の名前と json オブジェクトの最初の要素の名前を比較します。結果が true の場合、価格のみを更新し、名前は更新しません。結果が false の場合、json オブジェクトの次の要素をチェックします。これが私のコードです:
$(document).ready(function()
{
var x=0;
var y=0;
$("#addCart").click(function()
{
if($('#cartContent').is(':empty'))
{
$.getJSON('https://'+storedomain+'/cart?'+fcc.session_get()+'&output=json&callback=?', function(data)
{
$('#cartContent').append('<p class="name">' + data.products[x].name + '</p>' + '<p class="price">' + data.products[x].price + '</p>');
});
}
else
{
$.getJSON('https://'+storedomain+'/cart?'+fcc.session_get()+'&output=json&callback=?', function(data)
{
$('.name').each(function()
{
while (y < data.products.length-1)
{
if($(this).text() === data.products[x].name)
{
$('.price').eq(x).text(data.products[x].price);
}
x++;
y++;
}
x=0;
y=0;
});
});
}
});
});
<a id="addCart" href="http://mydomain.foxycart.com/cart?name=test-clothes&price=10.00">Add to Cart</a>
<div id="cartContent" style="display: inline; clear: both;"></div>
これはすべてうまくいきます。私の問題は、私が何日もテストしてきたことですが、次のことができる方法を思い付くことができません:
- ユーザーが商品 1 をカートに追加する場合は、名前と価格を追加します
- ユーザーが同じ商品 1 をカートに追加した場合、価格のみを更新します
- ユーザーが商品 2 をカートに追加する場合は、名前と価格を追加します
- ユーザーが同じ商品 2 をカートに追加した場合、価格のみを更新します
これまでのところ、私のコードは 1 つの製品を追加して比較することしかできませんでした。連続したものではありません。私はまだ JavaScript に慣れていないので、私の方法がばかげている場合は、より良い方法を提案してください。
ありがとう!