2016-11-29 65 views
12

我有下面的jQuery推遲邏輯。jquery推遲並根據服務器響應返回false

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的響應返回false爲$ .getJSON調用。 例如,如果data.status ==「失敗」,那麼我想爲getJSON返回「false」。 如何做到這一點?

感謝

+2

您不能返回從異步函數的任何信息。當'data.status =='failure''發生時,你到底需要做什麼? –

+0

你不能從異步調用返回....你想失敗的承諾? – epascarello

+0

是的。我想失敗的承諾。 – JavaUser

回答

4

你應該爲你的$.getJSON提供成功回調then和定製返回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"); 
    }); 
} 

Similar JSFiddle

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"; 
    }); 
}