凌亂的順序我有一個功能,看起來像這樣:操作問題
function showCreditCard(idx, data) {
if(typeof cardInfo == 'undefined' && parseInt($("#cc-dropdown-" + idx + " option:selected").val(),10) > -1) {
// actual selection made, but not default, so cardInfo hasn't been set. Need to run ajax call to get credit card;
console.log("show dropdown");
console.log("there are saved cards and a selection was made");
poGetPaymentOption('credit card', parseInt($("#cc-dropdown-" + idx + " option:selected").val(),10), idx);
// this is the default card; display dropdown with default selected and static fields
console.log("supposedly after poGetPayment");
console.dir(cardInfo);
// why is this stuff running before poGetPaymentOtion finishes and returns a cardInfo object?
if(cardInfo.cc.cc_type == 'VI') { $('#cc_visaBig-'+idx).attr('class', 'cc_visaBig'); }
$('#cc-static-wrap-'+idx).show();
updateButtonState();
}
}
正如你可以通過評論看到,poGetPaymentOption
調用後線運行之前的功能實際上是完整的。我已經通過poGetPaymentOption
函數中的日誌驗證了這一點(下文)。
function poGetPaymentOption(type, key, bIdx) {
if(type == 'credit card') {
console.log("signed in, credit card");
$.post('/site/ajax/customers/getSingleCreditCard',
{ 'key': key },
function(data) {
if(data.success == 1) {
console.log("poPayment success");
if(typeof cardInfo == 'undefined') {
cardInfo = new saveCardInfo(data);
}
} else {
console.log("poPayment no success");
}
}, 'json');
}
}
我會希望發生的是呼叫從showCreditCard
到poGetPaymentOption
通過AJAX調用返回成功(其它),然後創建一個名爲cardInfo
新saveCardInfo
對象。據我所知,它確實發生,但是檢查cardInfo.cc.cc_type
及更高版本的行都是在創建對象之前發生的。我附上了我的Firebug控制檯的屏幕截圖,因此很明顯,訂單事情正在發生。
我在做什麼錯?我需要確保poGetPaymentOption
已完全完成,並且在繼續執行showCreditCard
函數之前已創建了cardInfo
。
使用$就不是$。發佈並將async設置爲false。 – Cristy 2013-03-20 22:52:45
當poGetPaymentOption()結束時,您需要執行第一個方法的其餘部分。你需要一個回調函數。 – 2013-03-20 22:54:06
@Cristy:不,儘管可能,但這不可取。 – Bergi 2013-03-20 22:54:15