2012-07-31 85 views
0

我有兩個功能的問題。我想chcekResults只有在callAPI完成時才能運行。如何在第二個完成時運行一個異步函數?

我的單擊事件:

$("a#showA").click(function (e) { 
    e.preventDefault(); 
    chceckResults(callAPI(apiKey)); 
}); 

和功能:

var Count = 0; 
var ContractsArray = new Array(); 


function callAPI(yourAPIKey){ 
var enquiry = URL + yourAPIKey; 
//alert(enquiry); 
$.ajax({ 
url: enquiry, 
type: 'GET', 
dataType: "jsonp", 
jsonp: "callback", 
jsonpCallback: "jsonpCallback2", 
complete: function (response, responseCode) { 
}, 
success: function (json) { 
    $.each(json.Contracts, function (index, contract) { 
     // alert("Count before increament : " + Count); 
     // alert(contract.ContractCode); 
     ContractsArray[Count] = contract.ContractCode; 

     // alert("Count after increament : " + Count); 
     // alert("ContractsArray[Count]: " + ContractsArray[Count]); 
     Count++; 

     }); 
    } 
}); 
} 

function chceckResults(){ 
alert("Count value in chceckResults : " + Count); 
    for(var i = 0; i <= Count; i++){ 
    alert("ContractsArray[" + i + "]: " + ContractsArray[i]); 
    } 
} 

我想chcekResults只有當callAPI完成運行。我怎樣才能做到這一點?

+0

順便說一句,'chceckResults'是一個錯字?它不應該是'checkResults'嗎? – 2012-07-31 15:04:40

+0

是的,這是一個錯字。 – 2012-07-31 15:10:39

回答

2

您希望chcekResults在callAPI完成後運行,有幾種可能性,它在調用API成功後運行(我猜這就是您真正想要的),或者調用API失敗,或者兩者都有。

由於callAPI正在進行ajax調用,因此您可以將chcekResults放入ajax的成功回調中。

這樣的:

$.ajax({ 
    url: enquiry, 
    type: 'GET', 
    dataType: "jsonp", 
    jsonp: "callback", 
    jsonpCallback: "jsonpCallback2", 
    complete: function (response, responseCode) { 
    }, 
    success: function (json) { 
    $.each(json.Contracts, function (index, contract) { 
    // alert("Count before increament : " + Count); 
    // alert(contract.ContractCode); 
    ContractsArray[Count] = contract.ContractCode; 

    // alert("Count after increament : " + Count); 
    // alert("ContractsArray[Count]: " + ContractsArray[Count]); 
    Count++; 
    }); 
    // --------------------- Edit Begins ------------------------- 
    chcekResults(...); // This is run after ajax response returns. 
    // --------------------- Edit Ends ------------------------- 
    } 
}); 

這是做它的快捷方式,如果你想讓它更通用的,你可以通過chcekResults作爲回調到AJAX,這樣,如果這個回調定義,運行它,如果沒有,忽略。這樣,你可以使用這個Ajax有或沒有回調。

2

剛從callAPI的成功處理程序中調用chceckResults功能:

success: function (json) { 

    chceckResults(); 

    $.each(json.Contracts, function (index, contract) { 
     ContractsArray[Count] = contract.ContractCode; 
     Count++; 
    }); 
} 
1

呼叫checkResultcallAPIsuccess回調。 Success函數返回後調用。

相關問題