【发布时间】:2017-07-15 03:33:49
【问题描述】:
我正在使用通过 POST 和 GET 访问的 JS API。这是针对电子商务平台(Shopify)的,但我认为这个问题与平台无关。
我已经能够编写两个 POST 请求,无论是在代码中还是在控制台中,它们都可以根据需要单独执行。但是,我根本无法让他们一个接一个地触发(在我的情况下,第一个必须在第二个开始之前完成)。
第一个请求如下(这样清了购物车,不需要发送任何数据,只需要 POST 到的 URL):
function clearCart(){
$.ajax({
url: '/cart/clear.js',
method: 'POST',
success: function(){
console.log("cleared");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log('jqXHR:');
console.log(jqXHR);
console.log('textStatus:');
console.log(textStatus);
console.log('errorThrown:');
console.log(errorThrown);
}
});
}
第二个请求如下(将某商品和该商品的一定数量添加到购物车,然后重定向到结帐):
function cartAdd(quantity, id){
$.ajax({
url: '/cart/add.js',
method: 'POST',
data: {
quantity: quantity,
id: id
},
success: function(data){
console.log("added");
window.location.href = '/checkout';
},
error: function(jqXHR, textStatus, errorThrown) {
console.log('jqXHR:');
console.log(jqXHR);
console.log('textStatus:');
console.log(textStatus);
console.log('errorThrown:');
console.log(errorThrown);
}
});
}
我将它们链接在一起的方式如下所示(变量填充正确):
$.when(
clearCart(),
cartAdd(variantQuantity, variantID)
);
经过大量测试,我有时似乎让代码正常工作(可能是 1/10 的时间),所以我被引导相信这是一个时间问题,尽管我不能肯定地说t 始终如一地测试这些结果。
我唯一真正的线索是,当我使用 .done() 时,这些函数单独工作,但是当我使用 .success() 时,它们返回以下内容:
SyntaxError: Unexpected token :
at eval (<anonymous>)
at jquery-1.10.2.min.js?1013630…:4
at Function.globalEval (jquery-1.10.2.min.js?1013630…:4)
at text script (jquery-1.10.2.min.js?1013630…:6)
at On (jquery-1.10.2.min.js?1013630…:6)
at k (jquery-1.10.2.min.js?1013630…:6)
at XMLHttpRequest.r (jquery-1.10.2.min.js?1013630…:6)
有什么帮助吗?
更新 我实际上可以通过明确指定“json”的数据类型来解决语法错误。无论如何,这两个函数的行为仍然不稳定,有时只能以正确的顺序工作。
【问题讨论】:
-
您不能按照这个答案在
success响应中调用addCart()吗? stackoverflow.com/questions/10089447/…
标签: javascript jquery ajax shopify