我有以下jquery延迟逻辑。
var $qCallA = callA();
var $qCallB = callB();
$.when($qCallA,$qCallB).then(function () {
$("#spinnerDiv").removeClass('spinner show');
});
function callA() {
return $.getJSON("/callA", function (data) {
if (data.status === "success") {
buildTable1(data);
}
});
}
function callB() {
return $.getJSON("/callB", function (data) {
if (data.status === "success") {
buildTable2(data);
}
});
}
我希望根据后端json的响应为$ .getJSON调用返回false。 例如,如果data.status ==“失败”,那么我想为getJSON返回“false”。 怎么做到这一点?
由于
答案 0 :(得分:8)
听起来您想要使用正确的then
回调,您可以在其中为承诺返回新的结果值:
$.when(callA(), callB()).then(function(a, b) {
$("#spinnerDiv").removeClass('spinner show');
if (a && b) …
});
function callA() {
return $.getJSON("/callA").then(function(data) {
if (data.status === "success") {
buildTable1(data);
}
return data.status != "failure";
});
}
function callB() {
return $.getJSON("/callB").then(function(data) {
if (data.status === "success") {
buildTable2(data);
}
return data.status != "failure";
});
}
答案 1 :(得分:5)
您应为then
提供成功回调$.getJSON
,并为Deffered
返回自定义$.when
来处理。
这样您就可以根据JSON中的数据手动解析或拒绝。
var $qCallA = callA();
var $qCallB = callB();
$.when($qCallA,$qCallB).then(function (s1, s2) {
$("#spinnerDiv").removeClass('spinner show');
}).fail(function() {
//handle failure
});
function callA() {
return $.getJSON("/callA").then(function (data) {
if (data.status === 'failure') {
return $.Deferred().reject("A: no success");
}
return $.Deferred().resolve(data);
});
}
function callB() {
return $.getJSON("/callB").then(function (data) {
if (data.status === 'success') {
return $.Deferred().resolve(data);
}
return $.Deferred().reject("B: no success");
});
}