首页 > 解决方案 > 无论成功与否,如何在 $.post 之后运行 Javascript 代码?

问题描述

我有以下功能来检查产品是否可以添加到购物车并在之后执行操作

// Add item to cart
function add_cart_item(variant_id, qty, callback) {
  $.post('/cart/add.js', {
    quantity: qty,
    id: variant_id
  }, null, "JSON")
  .done(function() {
    // Do stuff after product is added to cart
    // Update cart product count
    refresh_cart('add', variant_id);
    
    // Callback
    if (typeof callback === 'function') { 
      callback();
    }
  })
  .fail(function(jqXHR) {
    handle_xhr(jqXHR);
  });
}

在其他地方,我用预加载器替换“立即购买”按钮文本,直到请求完成,然后使用以下代码返回原始文本

add_cart_item(variant.id, $('.quantity', $parent).val(), function(){
  // Enable button
  $button.prop('disabled', false).html($button_html);
});

这一直有效,直到函数中的post方法add_cart_item失败(通常带有 422 响应),其中按钮部分不再执行并卡在预加载器状态。

无论函数是否成功,如何使代码的按钮部分运行,但仍然等待它完成请求后再执行?

标签: javascriptshopify

解决方案


大概这是jQuery。

使用.always而不是.done.

来自https://api.jquery.com/jquery.post/

jqXHR.done()(用于成功)、jqXHR.fail()(用于错误)和 jqXHR.always()(用于完成,无论是成功还是错误;在 jQuery 1.6 中添加)方法采用函数参数,当请求终止。


推荐阅读