javascript - 无论成功与否,如何在 $.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 响应),其中按钮部分不再执行并卡在预加载器状态。
无论函数是否成功,如何使代码的按钮部分运行,但仍然等待它完成请求后再执行?
解决方案
大概这是jQuery。
使用.always
而不是.done
.
来自https://api.jquery.com/jquery.post/
jqXHR.done()(用于成功)、jqXHR.fail()(用于错误)和 jqXHR.always()(用于完成,无论是成功还是错误;在 jQuery 1.6 中添加)方法采用函数参数,当请求终止。