2015-09-27 57 views
0

如何在這兩個$.get調用完成後執行一些代碼?

if (invoice.is(":checked")) { 
    var data = { 
     save: 1, 
     order_id: order_id 
    } 

    jQuery.get('http://domain.co.uk/customer_orders/edit/view_pdf', data, function(response) {}); 
} 

var receipt = $(this).parents(".admin_email_preview_container").find("input[name='receipt']"); 
if (receipt.is(":checked")) { 
    var data = { 
     save: 1, 
     order_id: order_id, 
     invoice: 1 
    } 

    jQuery.get('http://domain.co.uk/customer_orders/edit/view_pdf', data, function(response) {}); 
} 

我想在上述兩個調用完成後才能運行另一個$.get調用。我該如何解決這個問題?

回答

1

您可以將由$.get返回的承諾存儲在數組中,並將其應用於$.when()。試試這個:

var requests = []; 

if ($invoice.is(":checked")) { 
    requests.push($.get('http://domain.co.uk/customer_orders/edit/view_pdf', { 
     save: 1, 
     order_id: order_id 
    })); 
} 

var $receipt = $(this).parents(".admin_email_preview_container").find("input[name='receipt']"); 
if ($receipt.is(":checked")) { 
    requests.push($.get('http://domain.co.uk/customer_orders/edit/view_pdf', { 
     save: 1, 
     order_id: order_id, 
     invoice: 1 
    })); 
} 

$.when.apply(requests).done(function() { 
    // both $.get calls have completed, run other code here... 
    $.get('/other-endpoint'); 
}); 

注意,我稍微整理了一下代碼所一貫使用的$代替jQuery(如果你需要防止$變量的污染,使用閉包),我直接移動的物體調用$.get以使其更易於閱讀並刪除多餘的空回調函數。

+0

感謝'apply'做什麼? – user892134

+0

很高興爲您提供幫助:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply –

相關問題