Tengo un problema con la plantilla ENVY. Esta plantilla no tiene soporte para agregar un botón de carrito de compras en las colecciones que se encuentran en el hogar. ante esto he decidido agregar mi propio código en el área donde se muestran estos productos, pero al presionar el botón agregar al carrito, me envía a una página de error con el mensaje "Parámetro faltante o no válido: Parámetro requerido faltante o no válido: artículos" mis códigos son los siguientes:
function instantBuy(){ var $ = jQuery; var formParams = $('form.cart').serialize(); $.ajax({ url: "/cart/add", type: "post", data: formParams, success: function(){ window.location.href = "/checkout"; }, error: function(){ } }) }código de formulario
<form action="/cart/add" method="post" class="variants" id="product-actions-{{ product.id }}" enctype="multipart/form-data"> <input type="hidden" name="variantId" value="{{ product.variants[0].id }}" /> <button class="button buynow-btn" title="Buy" onClick="instantBuy()"><span>Buy now</span></button> </form>Cuando envía una solicitud al /cart/add tiene que enviar argumentos "id". En este momento, está enviando "variantId" en lugar de "id".
Además, en su JavaScript no hay prevención predeterminada para preservar el navegador para enviar la solicitud.
Por otro lado, esto se puede hacer sin JavaScript.
Aquí está el código actualizado:
<form action="/cart/add" method="post" class="variants" id="product-actions-{{ liquidObject.id }}" enctype="multipart/form-data"> <input type="hidden" name="id" value="{{ liquidObject.variants[0].id }}" /> <input type="hidden" name="return_to" value="/checkout" /> <button class="button buynow-btn" title="Buy"><span>Buy now</span></button> </form>También se agregó un campo oculto "return_to", que redirigirá al usuario directamente al pago cuando presione el botón