An attribute which transforms the user’s click on the
routes.cart_add_url
,
routes.cart_change_url
,
routes.cart_clear_url
,
routes.cart_update_url
and line_item.url_to_remove
links
into a Shopify Cart API Ajax request.
Liquid Ajax Cart subscribes to the click
event of the data-ajax-cart-request-button
elements.
When the event is fired, Liquid Ajax Cart checks if the value of the element’s href
attribute is a valid
routes.cart_add_url
, routes.cart_change_url
, routes.cart_clear_url
, routes.cart_update_url
or line_item.url_to_remove
URL.
If the URL is valid, Liquid Ajax Cart turns the URL into a FormData
object and sends it as a Shopify Cart API Ajax request.
The most popular use cases are “Remove cart item” and “Clear cart” buttons.
It might be used for an “Add to cart” button, “Plus” and “Minus” cart item quantity buttons, but it is recommended to use other approaches for these cases.
<div class="my-cart" data-ajax-cart-section>
<h2>Cart</h2>
<div class="my-cart__items">
{% for item in cart.items %}
<div><a href="{{ item.url }}">{{ item.title }}</a></div>
<div>Price: {{ item.final_price | money }}</div>
<a data-ajax-cart-request-button href="{{ item.url_to_remove }}">
Remove
</a>
<!-- ... -->
<div class="my-cart" data-ajax-cart-section>
<h2>Cart</h2>
<a data-ajax-cart-request-button href="{{ routes.cart_clear_url }}">
Clear cart
</a>
<!-- ... -->
Liquid Ajax Cart sends a Shopify Cart API Ajax immediately when a user clicks a data-ajax-cart-request-button
button.
It might be a disadvantage in case of “Plus” and “Minus” buttons.
For example if a user wants to increase a cart item quantity by three by clicking a “Plus” button three times,
they will have to wait for Liquid Ajax Cart to finish a Shopify Cart API Ajax request after each click.
To provide a better user experience, it is recommended to use the <ajax-cart-quantity>
custom tag
for the “Plus” and “Minus” buttons. This custom tag waits for some time before sending a Shopify Cart API Ajax request,
letting a user click the button more than once without the “loading” state delay.
If you still want to use the data-ajax-cart-request-button
for the case, this is how to do it:
<div class="my-cart" data-ajax-cart-section>
<h2>Cart</h2>
<div class="my-cart__items" data-ajax-cart-section-scroll>
{% for item in cart.items %}
{% assign item_index = forloop.index %}
<hr />
<div><a href="{{ item.url }}">{{ item.title }}</a></div>
<div>Price: {{ item.final_price | money }}</div>
<div>
Quantity:
<a data-ajax-cart-request-button
href="{{ routes.cart_change_url }}?line={{ item_index }}&quantity={{ item.quantity | minus: 1 }}" >
Minus one
</a>
<input data-ajax-cart-quantity-input="{{ item_index }}"
name="updates[]"
value="{{ item.quantity }}"
type="number"
form="my-ajax-cart-form" />
<a data-ajax-cart-request-button
href="{{ routes.cart_change_url }}?line={{ item_index }}&quantity={{ item.quantity | plus: 1 }}">
Plus one
</a>
</div>
<!-- ... -->
If you have an “Add to cart” link, you can ajaxify it by adding the data-ajax-cart-request-button
to it.
But it is recommended to use the Shopify product forms to create “Add to cart” buttons and ajaxify them as explained in the “Product forms” guide. There are a few advantages when using ajaxified product form rather than links:
<ajax-cart-product-form>
custom tag, that is intended to ajaxify product forms, has the loading
attribute. This lets you show a dedicated loading indicator for the “Add to cart” button using CSS only.data-ajax-cart-errors
attribute within the ajaxified product forms to show error messages without writing JavaScript.data-ajax-cart-request-button
elements switch to the “loading” state when there is any Shopify Cart API Ajax request in progress.If you still want to use an “Add to cart” link with the data-ajax-cart-request-button
attribute, this is how to do it:
<!-- You have to use a variant ID with the "routes.cart_add_url" route -->
{% assign variant_id = 40875540775100 %}
<a data-ajax-cart-request-button
href="{{ routes.cart_add_url }}?id={{ variant_id }}&quantity=1" >
Add to cart
</a>
href
It is recommended to use the data-ajax-cart-request-button
with a real link because they works even without JavaScript and if Liquid Ajax Cart isn’t loaded.
But if you can’t use the a
tag with the href
parameter,
add the data-ajax-cart-request-button
attribute to any HTML element
and provide a valid routes.cart_add_url
, routes.cart_change_url
, routes.cart_clear_url
, routes.cart_update_url
or line_item.url_to_remove
URL as the attribute’s value:
<button data-ajax-cart-request-button="{{ item.url_to_remove }}">
Remove
</button>
<div data-ajax-cart-request-button="{{ routes.cart_clear_url }}">
Clear cart
</div>
The data-ajax-cart-request-button
elements become inactive when there is any Shopify Cart API Ajax request in progress.
If you want to make them visually disabled when they are inactive, use the js-ajax-cart-processing
CSS class
which is added by Liquid Ajax Cart when there is a Shopify Cart API Ajax request in progress.