FROM CACHE - jp_header
解決済

AJAXでattributeを更新しても元に戻ってしまう

SomaOnojima
遊覧客
26 3 18

AJAXでカートattributeを更新しても元に戻る現象に悩まされています。

レスポンスデータでは正常に更新されているようですが、ページを遷移または更新すると元に戻ってしまいます。

原因は何でしょうか。何か仕様を見落としているのでしょうか。

詳しい方がおられましたらご教授いただけましたら幸いです。

 

/// 最初に格納したデータ(/cart/update.js)
{
  "attributes":{"id":"100027"}
}

 

 

/// 更新したデータ(/cart/update.js)
{
  "attributes":{"id":"100002"}
}

 

 

/// レスポンスデータ (/cart.js) ※ここではちゃんと更新されている
.....
"attributes": {
  "id": "100002"
},
.....

 

 

/// 更新またはページを遷移してから取得したデータ(/cart.js) ※元に戻ってしまう
.....
"attributes": {
  "id": "100027"
},
.....

 

 

<!-- Liquidの表示でも同様です。 -->
{{ cart.attributes.id}}  //100002

 

 

1 件の受理された解決策
junichiokamura
Community Manager
1200 280 506

成功

cart attributes については、下記で説明しておりますが、
https://www.shopify.jp/blog/partner-shopify-theme-customize-cart-attributes-line-item-property-custo...

ここで書いているLiquidを使った方法も、カートで入力したのちに、購入へ進むのform submitで初めて反映されるので、別の遷移や再表示をしてしまうと前の入力はクリアされてしまうと思うので、挙動としては同じになるかと思います。

つまり、update.js で設定して、そのままチェックアウトに進めば反映されるかと思います。

(検証はしていないので、ご自身でご確認ください)

Senior Partner Solutions Engineer

元の投稿で解決策を見る

4件の返信4

_osamu_iwasaki_
Shopify Partner
185 47 193

cart.attributesは、INPUTタグ等の入力項目ですので、Ajaxで非同期更新したとしてもサーバーに保存されることはないと思います。

方法としては、javascriptでcookieに値を保存しておき、cookie取得して表示するか、

APIを使ってMetafieldsを更新して表示するか、どちらにしても一時保存するアクションが必要かと思います。

 

SomaOnojima
遊覧客
26 3 18

ご回答ありがとうございます。

お返事が遅れてすみません。

下記のShopify公式リファレンスには「Update cart attributes」という項目がありますが、これは実質機能しないものでしょうか?

https://shopify.dev/docs/themes/ajax-api/reference/cart#update-cart-attributes

junichiokamura
Community Manager
1200 280 506

成功

cart attributes については、下記で説明しておりますが、
https://www.shopify.jp/blog/partner-shopify-theme-customize-cart-attributes-line-item-property-custo...

ここで書いているLiquidを使った方法も、カートで入力したのちに、購入へ進むのform submitで初めて反映されるので、別の遷移や再表示をしてしまうと前の入力はクリアされてしまうと思うので、挙動としては同じになるかと思います。

つまり、update.js で設定して、そのままチェックアウトに進めば反映されるかと思います。

(検証はしていないので、ご自身でご確認ください)

Senior Partner Solutions Engineer
SomaOnojima
遊覧客
26 3 18

ご回答ありがとうございます。

仕様自体がそのような仕様なんですね…。

Cookie等で対応しますm(_ _)m